当mysql_query返回false时

时间:2011-12-20 14:23:43

标签: php mysql

除了编写错误的查询而没有访问表的权限之外,mysql_query何时返回false?还有其他案例吗?

5 个答案:

答案 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语句出错时
  • 当没有返回任何内容的MySQL语句出错时
  • 当用户没有MySQL访问表引用的权限时

在我看来,前两个是有点分散的。有什么可能的错误?您可以从MySQL获得59种不同的客户端错误。这些是更多系统相关的错误,我们可以假设php将处理并可能包含少量的抽象错误。

除了那些客户端错误之外,您在使用过程中遇到了一些更抽象的错误,这些错误与在应用程序中使用实际API而不是对MySQL服务器的原始访问更相关。那些是:

  • 拒绝访问
  • 无法连接到[本地] MySQL服务器
  • 与MySQL服务器的连接丢失
  • 客户端不支持身份验证协议
  • 以交互方式输入时密码失败
  • 主机'host_name'被阻止
  • 连接太多
  • 内存不足
  • MySQL服务器已经消失
  • 数据包太大
  • 通信错误和中止的连接
  • 表格已满
  • 无法创建/写入文件
  • 命令不同步
  • 忽略用户
  • 表'tbl_name'不存在
  • 无法初始化字符集
  • 表损坏问题
  • 语法相关问题

以下是我刚才所说的参考资料:

答案 1 :(得分:4)

感谢您的评论 我相信绝对没有必要深入研究这些细节。

您真正需要的是错误信息,您可以阅读并因此了解特定问题。

因此,似乎mysql_error()函数确实是您正在寻找的。

$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 *”是我所知道的懒惰编码,但我从未想过它会导致查询根本无法运行!