我一直在弄乱中的MySQLi
对象PHP
,并习惯于在执行语句之前准备语句。
到目前为止,我主要从事以下工作:
if($stmt = $mysqli->prepare($sql) == false){
return $mysqli->error;
}
当它失败时,它总是告诉我我的SQL本质上是错误的。
假设以下内容:
MySQL
连通性SQL
是正确的,即使它返回0行。在什么情况下准备好的陈述可能会失败?我问,主要是想知道是否有任何指向if($stmt = $mysqli->prepare($sql))
,还是我只是在浪费代码行?
有效查询失败的方式有很多:
您对表的特权可能会被撤销。
可以在无效上下文中使用参数占位符格式化正确的SQL查询。
该查询可能会根据服务器设置抛出错误,例如被零除会返回NULL,但是有人可以在服务器上全局启用SQL模式以使被零除会引发错误。在其他情况下,服务器设置也可以更改有效SQL查询的含义。
您说这些表存在,但是任何表都可以删除或重命名。另外,列可能会更改,因此您先前有效的SQL查询将不再找到其命名的列,或尝试以无效的方式使用它们。
连接可能会意外终止。
因此,在准备查询和执行查询时,您确实需要检测并响应错误。
考虑一下类似于fopen()这样的简单文件打开功能的类比。如果您拼错了文件名,或者在尝试打开文件之前就删除了文件,或者有人更改了文件特权,以致您无法使用指定的访问模式来读取文件,则可能会出错。这意味着您需要在每个fopen()调用之后检查是否成功。
如果将mysqli配置为引发异常,则可以减少错误检查代码。见http://www.php.net/manual/en/mysqli-driver.report-mode.php
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句