Как проверить возвращаемое значение из MySQL-> prepare ()

0

Я искал высоко и низко для ответа на этот вопрос, но безрезультатно. Я протягиваю вам своих коллег-кодеров. :-)

У меня есть следующий, казалось бы простой PHP-код:

$query = "SELECT marketid, type, quantity, price, datetime, bundleid, state, stoplossprice FROM orders WHERE type = ? AND state = ?";
$stmt = $login->mySQLi->prepare($query);
if(!$stmt) {
    throw new Exception(mysqli_error($login->mySQLi));
}
$stmt->bind_param("ss", $strOrderType, $strOrderState);
if($stmt)
{
    if(!$stmt->execute())
    {
        // Return an error
    }
}
$stmt->store_result();
$stmt->bind_result($marketid, $ordertype, $quantity, $buyprice, $buydatetime, $bundleid, $orderstate, $stoplossprice);
while ($stmt->fetch()) {
    // Do something with the returned data
}
$stmt->close();

У меня также почти такой же код несколько других мест, а в других местах он работает. Но по какой-то причине он заканчивается при выполнении оператора execute().

Кроме того, после выполнения инструкции prepare(), $stmt->affected_rows равно -1.

Я читал в документах MySQLi, значение -1 означает, что "-1 указывает, что запрос возвратил ошибку". Но я не могу понять, как выводить сообщение об ошибке из $stmt. $stmt->errno и $stmt->error не имеют значений.

Я также проверил файл журнала для MySQL, и он показывает следующее:

141117 21:21:39 222 Подготовка SELECT marketid, тип, количество, цена, дата и время, расслоение, состояние, stoplossprice FROM orders WHERE type =? И состояние =? 222 Статистика 223 Статистика
141117 21:21:54 222 Статистика
223 Статистика
141117 21:21:55 222 Статистика
223 Статистика
141117 21:21:56 222 Статистика
223 Статистика
141117 21:21:57 222 Execute SELECT marketid, тип, количество, цена, дата и время, расслоение, состояние, стоп-лоссцена из заказов WHERE type = 'Buy' AND state = 'Pending' 223 Quit
222 Закрыть stmt
222 Выход

Помоги мне Оби-ван Кеноби, ты моя единственная надежда (и, да, поздно, я чувствую себя немного сладко)!

  • 0
    Вы должны проверить на наличие ошибок после выполнения.
  • 0
    prepare не влияет на строки в базе данных, поэтому ожидается результат -1. Вы должны проверить на наличие ошибок после execute . Если есть ошибки - вставьте сюда, чтобы мы могли помочь.
Показать ещё 2 комментария
Теги:
mysqli

1 ответ

0

Я, наконец, смог найти ответ.

Перед выполнением кода, который я опубликовал, я выполнял другие операторы MySQL. В этих выражениях я выполнил mysqli_report(MYSQLI_REPORT_ALL); ,

Как я узнал в документах PHP, нужно быть осторожным при вызове mysqli_report(MYSQLI_REPORT_ALL); , Вот выдержка из документации mysqli_report(), объясняющая проблему:

"Будьте очень осторожны, используя эту функцию - это параметр для каждого процесса. Если ваш сервер настроен на повторное использование одного процесса PHP для нескольких запросов, это означает, что последний параметр этой функции в любом скрипте повлияет на все другие скрипты с использованием mysqli. Чтобы быть в безопасности, всегда звоните в конец скрипта. Версия PHP CGI, вероятно, безопасна от этого ".

Я добавил mysqli_report(MYSQLI_REPORT_OFF); до конца 1-го MySQL-заявлений, и теперь он работает как шарм. Благодаря PHP-документам! И благодаря секте и Антоан Мильков за ваши усилия!

Ещё вопросы

Сообщество Overcoder
Наверх
Меню