Подготовленные операторы и обработка ошибок bind_param

В следующем php-коде с подготовленными операторами намеренно вызывается ошибка для тестирования bind_param и выполнения, добавляя $ bikes.

В функции execute возвращается информация об ошибке; однако в bind_param, хотя и происходит ошибка, она не возвращает никакой информации об ошибке.

Как получить информацию об ошибке в bind_param?

$sqlQuery = "INSERT INTO the_cars (cars) VALUES (?)";

if($statement = $con->prepare($sqlQuery)){

if(!$statement->bind_param("s", $cars, $bikes)){ //bikes should not be here
$errors = $statement->error; //error is empty
};

if(!$statement->execute()){
$errors1 = $statement->error; // error: No data supplied for parameters in prepared statement
};

}else{
$errors = $con->error;
}

Редакция:

Руководство по PHP, похоже, предполагает, что в bind_param ошибка должна быть обработана.
См. Следующую часть текста: Пример # 3 INSERT, подготовленный один раз, выполненный несколько раз »/ * Подготовленный оператор, этап 2: связать и выполнить * /

http://php.net/manual/en/mysqli.quickstart.prepared-statements.php

Это также, кажется, позиция, отстаиваемая в некоторых постах. Например:

MySQLi подготовил отчеты об ошибках

Однако я сделал несколько попыток, и мне так и не удалось получить описание ошибки оператора в bind_param.

0

Решение

Вы не можете получить ошибку (и вы ее не получили) из чего-то, что еще не было выполнено, поэтому второе условное выражение не выдаст ошибку. Вы должны проверить, если выполнение было успешным, а не против bind_param() метод.

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

Что вам нужно сделать, это удалить if(!$statement) заявление от привязки, но держать его в исполнительной части.

Затем вы получите ошибку.

Ваше первое условное утверждение для if($statement = $con->prepare($sqlQuery)) действителен, поэтому else потому что он не выдаст ошибку, так как он не был выполнен.

Посмотрите следующие справочные руководства на PHP.net о том, как правильно запрашивать / проверять ошибки и не пытаться заново изобретать то, что не было предназначено для того, чтобы выдавать ошибки в первую очередь:

Короче говоря, обработка ошибок выполняется в запросе (и его выполнении), а не в привязке.

Обратитесь к руководству по bind_param():

В этом методе нет упоминаний или примеров обработки ошибок.

2

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector