Intereting Posts
Поиск способа обработки / доступа к веб-сайтам PHP OOP Как получить текущий индекс массива в цикле foreach? Преобразовать флажок в раскрывающийся список с помощью PHP Ошибка в системе бронирования календаря Функция isset () возвращает true, даже если элемент не задан Функции Javascript и PHP Каковы разрешения по умолчанию при создании файла с fopen () в php? Есть ли способ хранения / обновления в реальном времени Facebook api 'share', 'like' подсчитывает каждую страницу на сайте в базе данных? Как назначить массив PHP массиву jQuery? Принудительная страница для перезагрузки с сервера вместо загрузки кешированной версии Как вызвать PHP-файл из HTML или Javascript Как отсортировать массив ассоциативных массивов по значению заданного ключа в PHP? Как подсчитать онлайн-пользователей на веб-сайте как получить ширину экрана через php? Использование Twig для генерации JSON

Неустранимая ошибка: вызов функции-члена close () для не-объекта. Проблемы с MySQLi

это мой первый пост, так что легко на меня ^ _ ^

При загрузке на живой сервер я получаю следующую ошибку. Он работает нормально на localhost, который я считал странным. Любая помощь будет принята с благодарностью.

Fatal error: Call to a member function close() on a non-object.... 

Линия, на которую она ссылается

 $stmt->close(); 

Соединение с БД

 $connection=new mysqli($MYSQL_HOST,$MYSQL_USER,$MYSQL_PASS,$DB)or die(mysqli_error($connection)); 

Сам класс.

 function getTimes(){ //this method just pulls the results of the query and returns them as an array global $connection; $route = $this->route; $station = $this->station; $day = $this->day; // create a prepared statement if ($stmt = $connection->prepare("select time from timetable where route=? and day=? and station=?")) { $stmt->bind_param("sss", $route, $day, $station); // bind parameters for markers $stmt->execute(); //execute query $stmt->bind_result($col1); //bind result variables while ($stmt->fetch()){ $results[]=$col1; } } $stmt->close();//close statement return $results; } 

Вы должны положить $stmt в вас, если предложение. Существует вероятность того, что if (false) и по-прежнему попадет в ваш $stmt->close();

Ваша проблема заключалась в том, что объект $stmt был создан как часть теста условия if . В тех случаях, когда это не удалось, т.е. когда оно возвращает false, вы все равно пытались вызвать ->close() на нем в любом случае. Я переместил вызов метода в блок if .

Теперь вам нужно добавить предложение else , чтобы справиться с тем фактом, что ваш скрипт не смог подготовить утверждение, и если вы говорите, что это работает локально, но не на вашем реальном сервере, я полагаю, что существует некоторая разница в конфигурации, вызывающая проблему здесь. Вам нужно включить обработку ошибок с помощью display_errors('1') и error_reporting(E_ALL) . Не забудьте выключить их, прежде чем разрешить миру новый сценарий. 🙂

 function getTimes(){ //this method just pulls the results of the query and returns them as an array global $connection; $route = $this->route; $station = $this->station; $day = $this->day; // create a prepared statement if ($stmt = $connection->prepare("select time from timetable where route=? and day=? and station=?")) { $stmt->bind_param("sss", $route, $day, $station); // bind parameters for markers $stmt->execute(); //execute query $stmt->bind_result($col1); //bind result variables while ($stmt->fetch()){ $results[]=$col1; } $stmt->close();//close statement } return $results; } 

Переместите вызов close() в ваш оператор if, чтобы он вызывается только при успешном создании $stmt .

  // create a prepared statement if ($stmt = $connection->prepare("select time from timetable where route=? and day=? and station=?")) { $stmt->bind_param("sss", $route, $day, $station); // bind parameters for markers $stmt->execute(); //execute query $stmt->bind_result($col1); //bind result variables while ($stmt->fetch()){ $results[]=$col1; } $stmt->close();//close statement } 

Я подозреваю, что на вашем локальном компьютере у вас нет ошибок, но на сервере вы загружаете, ошибки включены.

Корневой проблемой для решения здесь является тот факт, что prepare() не работает. Проблема там, скорее всего, в базе данных на сервере отсутствует таблица timetable или в этой таблице отсутствует один или несколько полей route , day или station . Как сказал cbuckley, проверьте $connection->error для полного сообщения об ошибке.

Когда вы загружались на сервер, не забыли ли вы также изменить структуру базы данных на сервере?