Не удалось получить mysqli - PullRequest
2 голосов
/ 20 января 2012

Я использую сервер nginx с PHP-FPM и MySQL.В PHP установлены расширения MySQL и MySQLi, что подтверждается phpinfo().Я загрузил свои скрипты, которые отлично работают на localhost, и я получаю ошибку 500, когда пытаюсь загрузить страницу.Мои журналы nginx показывают это:

2012/01/19 22:01:27 [ошибка] 3393 # 0: * 14 FastCGI отправил в stderr: «Предупреждение PHP: mysqli :: prepare ():Не удалось получить mysqli в /var/www/mydomain.com/chat/index.php в строке 12

Неустранимая ошибка PHP: вызов функции execute () для необъекта в / var /www / mydomain.com / chat / index.php в строке 13 "при чтении заголовка ответа из апстрима, клиент: 82.32.181.151, сервер: mydomain.com, запрос:" GET / chat / HTTP / 1.1 ", апстрим:" fastcgi: //127.0.0.1: 9000 ", хост:" mydomain.com "

Я заменил свой фактический домен на mydomain.com.В строке 12 index.php у меня есть это:

$stmt = $mysqli->prepare('SELECT r_id, name, room_pass, max_users FROM `rooms` ORDER BY name ASC');

После Google я нашел несколько причин.Во-первых, я преждевременно закрыл соединение с базой данных, что не так.Другое дело, что я смешал ООП и функциональные вызовы MySQLi, что также не является проблемой.Кроме того, моя информация о соединении с базой данных верна.

Итак, я в тупике.

Ответы [ 2 ]

6 голосов
/ 20 января 2012

Я предполагаю, что ваша строка 13 на самом деле такая:

$stmt->execute();

, что означает, что ваш запрос на подготовку завершился неудачно и вернул логическое значение FALSE на $stmt Так как логическое false не является объектом, вы не можете вызывать методы для него, поэтому возникает ошибка.

Попробуйте сделать код:

$stmt = $mysqli->prepare(...);
if ($stmt === FALSE) {
    die($mysqli->error);
}
$stmt->execute();
5 голосов
/ 20 января 2012

Проблема в вашей строке 13. Там вы, вероятно, делаете что-то вроде

$stmt->execute();

Но теперь переменная, которую вы просите содержать метод execute, не является объектом. Проблемы, которые могут быть вашей причиной:

  1. вы ввели $stmt неправильно, поэтому это неинициализированная переменная
  2. Ваш запрос неверный, поэтому вместо подготовленного выражения вы получили ложное
  3. Ваше db-соединение не работает, поэтому ваш $mysqli->prepare не работает.

Выясните, какой это, используя функции ошибки mysqli ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...