mysqli mysql assoc_mysqli_fetch_assoc()期望参数1为mysqli_result或如何获取MySQLi

在mysqli中,通过mysqli_report()函数配置错误报告,将MySQL错误转化为PHP异常,便于定位问题。开发环境中,应设置error_reporting为E_ALL,display_errors为1。生产环境中,即使display_errors设为0,也要确保log_errors为1来记录错误。当查询失败时,不要使用if条件判断,直接执行代码,异常会被自动处理。错误消息提供了问题线索,应仔细阅读理解以解决错误。
摘要由CSDN通过智能技术生成

有时您的查询失败,您不知道原因。因此,配置PHP和mysqli以报告每个错误非常重要。

如何在mysqli中获取错误消息

首先,MySQLi在所有环境中连接之前总是有这条线:mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);

之后,所有MySQL错误都将转移到PHP异常中。反过来,未捕获的异常会导致PHP致命错误。因此,如果出现MySQL错误,您将收到传统的PHP错误。这将立即让您意识到错误原因。堆栈跟踪将引导您到达发生错误的确切位置。

如何在不同的环境中配置PHP

以下是我关于PHP错误报告的文章的要点:

请注意,您必须能够查看PHP错误。这确实是不同环境的问题:

您必须将相应的配置选项设置为以下值在开发服务器上error_reporting应该设置为E_ALL值;

display_errors 应设为1

在生产服务器上error_reporting应该设置为E_ALL值;

display_errors 应设为0

log_errors 应设为1

如何实际使用它?

只是删除了错误手动检查任何代码,所有这些or die(),if ($result)和这样的。只需立即编写数据库交互代码即可$stmt = $this->con->prepare("INSERT INTO table(name, quantity) VALUES (?,?)");$stmt->bind_param("si", $name, $quantity);$stmt->execute();

再次,witohut周围的任何条件。如果发生错误,则会将其视为代码中的任何其他错误。例如,在开发PC上,它只会出现在屏幕上。对于实时网站,您将需要一个错误包装,但这是一个不同的故事,与mysqli及其错误完全无关。

如何处理您收到的错误消息

收到错误消息后,您必须阅读并理解它。这听起来太明显了,但学习者经常忽略错误信息的极端有用性。但大多数时候它解释这个问题非常简单。比如,如果它说特定表不存在,则必须检查拼写,拼写错误,字母大小写,凭证等。或者,如果它说SQL语法中存在错误,那么您必须检查SQL。问题点就在错误消息中引用的查询部分之前。

您还必须信任该错误消息。如果它说令牌的数量与绑定变量的数量不匹配那么它就是这样。缺席的表或列也是如此。鉴于选择,无论是你自己的错误还是错误信息是错误的,总是坚持前者。它再次听起来居高临下,但在这个网站上的数百个问题证明这个建议非常有用。

关于错误报告的不应该做的清单使用错误抑制运算符(@)

使用die()或echo或任何其他功能无条件地在屏幕上打印错误消息。PHP可以很好地回应它,不需要任何帮助。

手动测试查询结果(如if($result))只是没有意义。您的查询失败并且您已经获得了错误异常,或者它没有问题,也没有什么可以测试的。

使用try..catch回显错误消息。PHP可以做得更好,更好。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值