gpt4 book ai didi

php - 检测 mysqli 准备语句中的错误

转载 作者:行者123 更新时间:2023-12-02 13:54:02 25 4
gpt4 key购买 nike

我有一个自定义错误处理程序,但我需要知道在准备好的语句中测试错误的位置。

我到底要测试吗prepared() , bind() , execute()store_result()阶段还是仅选择阶段?

$statement = $databaseHandler->mysqli->prepare($query) or trigger_error($mysqli->error);
$statement->bind_param('s', $userIp) or trigger_error($mysqli->error);
$statement->execute() or trigger_error($mysqli->error);
$statement->store_result() or trigger_error($mysqli->error);

在查找 num_rows 时我什至需要检查错误吗?或者只是 php 无法完成基本工作,因为它不再与 mysqli 服务器通信,因此不会出现任何问题?

你应该停止寻找错误的意义是什么,是在execute()之后吗? ?如store_result()不工作将是 php 无法完成其工作,这将是服务器实际上没有运行?

我还看到过代码,其中 prepare() stage 只是包含在错误的 if 语句中,这样做是否意味着其他阶段中的错误不会被处理?准备阶段是不是最容易出错?

最佳答案

据我所知,您需要将 mysqli 错误转换为 PHP 错误,仅用于准备和执行 - 与服务器交互的命令。所有其他命令都会发出常规 PHP 错误。

还有另一种方法,但它是相当新的,我还没有对其进行太多测试。但这非常诱人,因为它可以让您摆脱所有这些触发错误:

mysqli_report(MYSQLI_REPORT_ERROR);

这个简单的调用将使 mysqli 自动发出 PHP 错误。

虽然它MYSQLI_REPORT_STRICT似乎是更好的选择,但它不适用于我的版本。而MYSQLI_REPORT_ALL也会翻译 mysqli 提示,一方面,这非常好,但它可能会向您发送类似 'No index used in query/prepared statement' 的垃圾邮件。 ,这很糟糕。因此,目前唯一可用的设置是 MYSQLI_REPORT_ERROR

所以,你可以做到这一点

mysqli_report(MYSQLI_REPORT_ERROR);

$statement = $db->prepare($query);
$statement->bind_param('s', $userIp);
$statement->execute();
$statement->store_result();

更新

最后,我得到了MYSQLI_REPORT_STRICT的正确用法。 :

mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

将使 mysqli 抛出异常而不是常规错误。
异常在很多方面都比常规错误更好:它们总是包含堆栈跟踪,可以使用 try..catch 捕获它们。或使用专用错误处理程序进行处理。即使未经处理,它们也会像常规 PHP 错误一样,按照站点范围的错误报告设置提供所有重要信息。

关于php - 检测 mysqli 准备语句中的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18453924/

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