В следующем 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.
Вы не можете получить ошибку (и вы ее не получили) из чего-то, что еще не было выполнено, поэтому второе условное выражение не выдаст ошибку. Вы должны проверить, если выполнение было успешным, а не против bind_param()
метод.
Тогда третье (условное утверждение) теоретически не выдаст ошибку из-за того, что у вас есть в вашем запросе, которое теоретически будет считаться допустимым (запросным) утверждением.
Что вам нужно сделать, это удалить if(!$statement)
заявление от привязки, но держать его в исполнительной части.
Затем вы получите ошибку.
Ваше первое условное утверждение для if($statement = $con->prepare($sqlQuery))
действителен, поэтому else
потому что он не выдаст ошибку, так как он не был выполнен.
Посмотрите следующие справочные руководства на PHP.net о том, как правильно запрашивать / проверять ошибки и не пытаться заново изобретать то, что не было предназначено для того, чтобы выдавать ошибки в первую очередь:
Короче говоря, обработка ошибок выполняется в запросе (и его выполнении), а не в привязке.
Обратитесь к руководству по bind_param()
:
В этом методе нет упоминаний или примеров обработки ошибок.
Других решений пока нет …