首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >准备语句和bind_param错误处理

准备语句和bind_param错误处理
EN

Stack Overflow用户
提问于 2017-09-10 20:13:11
回答 1查看 2.6K关注 0票数 0

在下面的php代码中,使用准备好的语句故意导致测试bind_param和执行错误,添加$bikes。

在execute函数中返回错误信息;但是,在bind_param中,虽然发生错误,但它不返回任何错误信息。

如何在bind_param中获取错误信息?

代码语言:javascript
复制
$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中语句错误的描述。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-10 21:51:58

无法从尚未执行的内容中获取错误(也不能从其中获取错误),因此第二个条件语句不会抛出错误。您需要检查执行是否成功,而不是对照bind_param()方法。

然后,第三条(条件语句)理论上不会抛出错误,因为在理论上,查询中的内容将被视为有效(查询)语句。

您需要做的是从绑定中删除if(!$statement)语句,但将其保留在执行部分。

然后您将收到一个错误。

if($statement = $con->prepare($sqlQuery))的第一个条件语句是有效的,因此它的else不会抛出错误,因为它没有被执行。

请参阅以下关于PHP.net的参考手册,了解如何正确地查询/检查错误,并且不要试图重新创建最初不打算抛出错误的内容:

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

简而言之,错误处理是在查询(及其执行)上完成的,而不是在绑定上完成的。

查阅bind_param()手册

  • http://php.net/manual/en/mysqli-stmt.bind-param.php

在这个方法上没有提到错误处理的例子。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46145139

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档