MySQLiprepared statements 错误报告

新手上路,请多包涵

我试图了解 MySQli,但我对错误报告感到困惑。我使用 MySQLi ‘prepare’ 语句的返回值来检测执行 SQL 时的错误,如下所示:

 $stmt_test =  $mysqliDatabaseConnection->stmt_init();
if($stmt_test->prepare("INSERT INTO testtable VALUES (23,44,56)"))
{
 $stmt_test->execute();
 $stmt_test->close();
}
else echo("Statement failed: ". $stmt_test->error . "<br>");

但是,prepare语句的返回值是不是只检测SQL语句的准备是否出错,而不检测执行错误呢?如果是这样,我应该因此更改我的执行行以标记错误,如下所示:

 if($stmt_test->execute()) $errorflag=true;

然后为了安全起见,我还应该在语句执行后执行以下操作:

 if($stmt_test->errno) {$errorflag=true;}

…或者我是否可以开始并且 MySQLi 准备语句的返回值捕获与它定义的查询的完整执行相关的所有错误?

谢谢 C

原文由 Columbo 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 483
2 个回答

mysqli 的每个方法都可能失败。幸运的是,现在 mysqli 可以向您报告每个问题,您只需要询问即可。只需将这一行添加到连接代码中,

 mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

在那之后,每一个错误都会暴露出来。无需测试任何返回值,只需立即编写语句:

 $stmt = $mysqli->prepare("INSERT INTO testtable VALUES (?,?,?)");
$stmt->bind_param('iii', $x, $y, $z);
$stmt->execute();

当任何步骤发生错误时,它会抛出一个普通的 PHP 异常,可以像任何其他 PHP 错误一样处理或报告该异常。只需确保您正确配置了 PHP 错误报告,即在开发服务器上的错误显示在屏幕上,而在生产服务器上的错误从不显示而是记录下来。

原文由 VolkerK 发布,翻译遵循 CC BY-SA 4.0 许可协议

不确定这是否回答了您的问题。对不起,如果没有

要从 mysql 数据库中获取有关您的查询报告的错误,您需要使用您的连接对象作为焦点。

所以:

 echo $mysqliDatabaseConnection->error

会回显从 mysql 发送的关于您的查询的错误。

希望有帮助

原文由 andyface 发布,翻译遵循 CC BY-SA 2.5 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题