首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqli准备语句中的错误检测

mysqli准备语句中的错误检测
EN

Stack Overflow用户
提问于 2013-08-26 22:15:05
回答 1查看 2.4K关注 0票数 3

我已经设置了一个自定义错误处理程序,但是我需要知道在哪里测试我准备好的语句中的错误。

我是在所有的prepared()bind()execute()store_result()阶段还是仅在选定的阶段进行测试?

代码语言:javascript
复制
$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时,我甚至需要检查错误吗?还是因为它不再与mysqli服务器通信,所以不应该出错,所以php就不能完成基本的工作了?

你应该停止寻找错误有什么意义,是在execute()之后吗?由于store_result()不工作将导致php无法完成其工作,因此服务器实际上无法正常工作?

此外,我还看到了代码,其中prepare()阶段被错误的if语句包围,这样做是否意味着其他阶段中的错误不会被处理?准备阶段最有可能出错吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-08-27 03:37:40

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

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

代码语言:javascript
复制
mysqli_report(MYSQLI_REPORT_ERROR);

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

虽然MYSQLI_REPORT_STRICT似乎是更好的选择,但它对我的版本还不起作用。虽然MYSQLI_REPORT_ALL也会翻译mysqli提示,这一方面相当好,但是它可以用'No index used in query/prepared statement'这样的通知来垃圾邮件,这是很糟糕的。因此,目前唯一可用的设置是MYSQLI_REPORT_ERROR

所以,你可以让它

代码语言:javascript
复制
mysqli_report(MYSQLI_REPORT_ERROR);

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

更新

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

代码语言:javascript
复制
mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

将使mysqli抛出异常而不是常规错误。

在许多方面,异常都优于常规错误:它们总是包含一个堆栈跟踪,可以使用try..catch捕获它们,或者使用专用的错误处理程序来处理它们。即使是未经处理,它们也会充当常规PHP错误,提供所有重要信息,跟踪站点范围内的错误报告设置。

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

https://stackoverflow.com/questions/18453924

复制
相关文章

相似问题

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