gpt4 book ai didi

php - 准备好的语句何时会失败?

转载 作者:行者123 更新时间:2023-12-04 14:35:11 28 4
gpt4 key购买 nike

我一直在摆弄 PHP 中的 MySQLi 对象,并且习惯了在执行语句之前准备语句。

到目前为止,我主要做了以下事情:

if($stmt = $mysqli->prepare($sql) == false){
return $mysqli->error;
}

当它失败时,它总是告诉我,我的 SQL 基本上是错误的。

假设如下:

  • 已完成检查以确保 MySQL 连接
  • SQL 是正确的,即使它返回 0 行也是如此。
  • 所有相关表格都存在。

准备好的语句在什么情况下会失败?我问,主要是想知道 if($stmt = $mysqli->prepare($sql)) 是否有任何意义,还是我只是在浪费代码行?

最佳答案

有效查询失败的方式有很多种:

  • 您对表格的权限可能会被撤销。

  • 可以在无效上下文中使用参数占位符格式化正确的 SQL 查询。

  • 根据服务器设置,查询可能会抛出错误,例如除以零返回 NULL 但有人可以启用 SQL mode全局在服务器上进行除以零抛出错误。还有其他情况,服务器设置可以改变有效 SQL 查询的含义。

  • 您说表存在,但可以删除或重命名任何表。此外,列可能会被更改,因此您之前有效的 SQL 查询不再找到它命名的列,或尝试以无效方式使用它们。

  • 连接可能会意外终止。

因此,您确实需要在准备执行 查询时检测并响应错误。

将一个简单的文件打开函数类比为 fopen() .如果您拼错了文件名,或者如果文件在您尝试打开它之前被删除,或者如果有人更改了文件权限以致您无法使用您指定的访问模式读取它,您可能会遇到错误。这意味着您需要在每次 fopen() 调用后检查是否成功。

如果将 mysqli 配置为抛出异常,则可以减少错误检查代码。参见 http://www.php.net/manual/en/mysqli-driver.report-mode.php

关于php - 准备好的语句何时会失败?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21049546/

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