除了编写错误的查询而没有访问表的权限之外,mysql_query
何时返回false?还有其他案例吗?
答案 0 :(得分:14)
参见参考指南:
对于SELECT,SHOW,DESCRIBE,EXPLAIN和其他语句返回 resultset,mysql_query()在成功时返回资源,或者返回FALSE 错误。
对于其他类型的SQL语句,INSERT,UPDATE,DELETE,DROP等, mysql_query()成功时返回TRUE,错误时返回FALSE。
返回的结果资源应该传递给mysql_fetch_array(), 以及用于处理结果表的其他函数,以访问 返回数据。
使用mysql_num_rows()来查找为a返回的行数 SELECT语句或mysql_affected_rows()来查找多少行 受到DELETE,INSERT,REPLACE或UPDATE语句的影响。
mysql_query()也会失败,如果用户没有,则返回FALSE 有权访问查询引用的表。
http://php.net/manual/en/function.mysql-query.php
编辑:澄清这些错误究竟是什么。
所以我们列出了可以返回false的东西:
在我看来,前两个是有点分散的。有什么可能的错误?您可以从MySQL获得59种不同的客户端错误。这些是更多系统相关的错误,我们可以假设php将处理并可能包含少量的抽象错误。
除了那些客户端错误之外,您在使用过程中遇到了一些更抽象的错误,这些错误与在应用程序中使用实际API而不是对MySQL服务器的原始访问更相关。那些是:
以下是我刚才所说的参考资料:
答案 1 :(得分:4)
感谢您的评论 我相信绝对没有必要深入研究这些细节。
您真正需要的是错误信息,您可以阅读并因此了解特定问题。
因此,似乎mysql_error()
函数确实是您正在寻找的。 p>
$res = mysql_query($sql) or trigger_error(mysql_error()." in ".$sql);
看起来足够了。
答案 2 :(得分:2)
不幸的是,当涉及触发错误的可能方法时,参考指南并不是非常具体。除语法无效的语句和没有权限外,超出创建新语句的限制是一个可能的错误,如果您遇到高负载可能会弹出。
答案 3 :(得分:1)
如果正确写入查询但没有受影响的行,则UPDATE查询将返回false,例如:
UPDATE `table` SET `id`=1 WHERE `id`=1
答案 4 :(得分:0)
我遇到了这个错误,mysql_error()返回“MySQL服务器已经消失”。我的查询是一个非常简单的查询,从一个非常小的表中选择*。当我更改“选择*”以选择我想要的两列时,它解决了问题。 “Select *”是我所知道的懒惰编码,但我从未想过它会导致查询根本无法运行!