在下面的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 :插入准备一次,执行多次? /*准备语句,第2阶段:绑定和执行*/
http://php.net/manual/en/mysqli.quickstart.prepared-statements.php
这似乎也是一些职位所主张的立场。例如:
MySQLi prepared statements error reporting
然而,我做了几次尝试,但始终无法获得bind_param中语句错误的描述。
发布于 2017-09-10 21:51:58
无法从尚未执行的内容中获取错误(也不能从其中获取错误),因此第二个条件语句不会抛出错误。您需要检查执行是否成功,而不是对照bind_param()方法。
然后,第三条(条件语句)理论上不会抛出错误,因为在理论上,查询中的内容将被视为有效(查询)语句。
您需要做的是从绑定中删除if(!$statement)语句,但将其保留在执行部分。
然后您将收到一个错误。
if($statement = $con->prepare($sqlQuery))的第一个条件语句是有效的,因此它的else不会抛出错误,因为它没有被执行。
请参阅以下关于PHP.net的参考手册,了解如何正确地查询/检查错误,并且不要试图重新创建最初不打算抛出错误的内容:
简而言之,错误处理是在查询(及其执行)上完成的,而不是在绑定上完成的。
查阅bind_param()手册
在这个方法上没有提到错误处理的例子。
https://stackoverflow.com/questions/46145139
复制相似问题