gpt4 book ai didi

php - 准备好的语句和 bind_param 错误处理

转载 作者:行者123 更新时间:2023-12-03 08:11:20 24 4
gpt4 key购买 nike

在以下带有准备好的语句的 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 中处理错误。
见正文以下部分: Example #3 INSERT 准备一次,执行多次 »/* Prepared statement, stage 2: bind and execute */

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

这似乎也是一些帖子所倡导的立场。例如:

MySQLi prepared statements error reporting

但是,我进行了几次尝试,但始终无法在 bind_param 中获得语句错误的描述。

最佳答案

您无法从尚未执行的内容中得到错误(也没有得到错误),因此第二个条件语句不会引发错误。您需要检查执行是否成功,而不是针对 bind_param()方法。

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

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

然后您将收到一个错误。
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)上。

    请参阅 bind_param() 上的手册:
  • http://php.net/manual/en/mysqli-stmt.bind-param.php

  • 该方法没有提及或示例错误处理。

    关于php - 准备好的语句和 bind_param 错误处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46145139/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com