【发布时间】:2012-03-22 13:52:15
【问题描述】:
当经典 PHP mysql 中的 SQL 语法出现错误时,查询不会发生而没有任何其他影响。但是在 mysqli 中,它会以致命错误杀死 PHP 脚本
mysql_query("SELECT title, misspelled_column FROM posts");
$mysqli->query("SELECT title, misspelled_column FROM posts");
在第一种情况下,它将显示其他查询和 php 输出;但第二种情况会杀死脚本
Fatal error: Call to a member function fetch_assoc() on a non-object
该问题与错误查询返回的non-object 有关。我可以通过
if($result){$row = $result->fetch_assoc();}
但我的问题是,为什么我不需要在经典 mysql 中进行此检查?有了更先进的系统,人们期望新功能不会丢失我们所拥有的。
【问题讨论】:
-
修复错误。问题解决了。
-
您永远不需要处理 MySQL 语法错误,因为这些应该在开发阶段得到处理。并且永远不要将错误抑制运算符用于类似的事情。
-
请附上错误信息。
-
我同意,有时 mysqli 使用起来不如 mysql 方便,这似乎很奇怪。另一方面,mysqli 禁止你做的大部分事情都是我们一开始就不应该做的事情。两个大示例是编写非参数化查询或尝试使用查询结果而不确保它们存在。能够做到这一点可能很方便,但这也是一个巨大的安全漏洞或等待发生的应用程序崩溃。
标签: php mysql mysqli syntax-error fatal-error