mysqli-> prepare функция возвращает ноль - PullRequest
0 голосов
/ 30 мая 2009

Это ужасный вопрос, потому что у меня нет простого способа воспроизвести его. Однако я использую Zend Framework для подключения к моей базе данных MySQL на OS X. Иногда вызов функции prepare для объекта mysqli возвращает значение null. Указанные возвращаемые значения для функции prepare - false или объект оператора.

Я не могу понять, где еще искать информацию о том, почему оператор подготовки не выполняется. Есть ли способ получить представление о процессе подготовки, чтобы понять, почему он не работает? Все мои проблемы возникают, когда транзакция открыта.

Извините за отсутствие конкретики, но я действительно не могу понять, почему это происходит.

Ответы [ 4 ]

1 голос
/ 31 мая 2009

Просто чтобы исправить ToughPal, вы должны использовать:

mysqli_query ($ db, "INSERT INTO table (variable1, variable2) VALUES (привет, мое имя);

Помните, что вам нужно сначала определить и указать в запросе соединение db, прежде чем вы получите фактический SQL.

Не забудьте заключить имена таблиц, имена столбцов и данные значений в обратные экранированные символы.

0 голосов
/ 15 августа 2017

если вы делаете что-то подобное

$mysqli = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);
$query = "...";
$mysqli->prepare($query);

затем вы можете просмотреть mysqli :: $ error рядом, чтобы увидеть полезные ошибки о том, почему prepare () не удалось

print_r($mysqli->error);
0 голосов
/ 01 июня 2009

Ну, мне удалось найти проблему в выходные, но на самом деле удалось устранить только симптомы, а не причину.

Я не включал SQL в исходную проблему, потому что проблема возникала случайно, один и тот же код иногда работал, а иногда нет. Проблема выглядит так, как будто это проблема с указателем памяти. Всякий раз, когда у меня возникали проблемы, Zend Debugger говорил мне, что у меня есть объект mysqli. Я верю в это, потому что в противном случае я бы получил ошибку при попытке запустить на нем функцию подготовки. У меня есть одноэлементный объект, который действует как контейнер для моего соединения mysqli, но всякий раз, когда функция подготовки не выполнялась, === показывал, что используемое mysqli не совпадало с соединением mysqli в моем одноэлементном объекте.

В конце концов, единственная проблема Zend Framework заключается в том, что он не завершается ошибкой, если функция prepare возвращает ноль. Если вы видите эту проблему, используйте ===, чтобы убедиться, что соединение на самом деле совпадает с тем, которое вы ранее инициировали.

0 голосов
/ 31 мая 2009

Пример подготовленного оператора
$ result = $ db-> query ('INSERT INTO server (ключ, значение) VALUES (: ключ,: значение)', массив ('key' => $ foo, 'value' => $ bar)

Можете ли вы сообщить нам ваш запрос к БД?

Попробуйте выполнить запрос к базе данных с тестовыми данными и посмотрите, нормально ли работает запрос для начала. Если запрос в порядке, мы можем посмотреть, почему код не работает.

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