【发布时间】:2011-09-06 16:20:03
【问题描述】:
根据mysql_query() 的手册以及我所知道的关于我多次使用的这个函数的所有信息,如果查询是SELECT,它可以返回资源或FALSE。但它会不时返回TRUE。
这怎么可能?以前从未发生过。这是 PHP 5.3.2 中的错误吗?有人知道吗?
代码是这样的:
if (!$resource = mysql_query($query, $handle)) {
throw some exception;
}
var_dump($query);
if ($resource === true && strpos($query, 'SELECT') !== false) {
throw new Exception('mysql_query() returned TRUE for SELECT');
}
它也很难复制。它只是不时发生。我还注意到这很可能发生在服务器突然中断连接的同时,在这种情况下它应该返回FALSE...
【问题讨论】:
-
您确定这是您正在使用的查询返回 true 吗?因为 true 应该只用于插入更新或删除。我会检查并确保您没有看到前一个语句的变量结转。
-
您是如何得出它返回 TRUE 的结论的?在你认为发生这种情况的地方显示一个 sn-p。
-
添加了一个 sn-p。
var_dump()清楚地显示了我在普通 MySQL 客户端中运行的普通SELECT查询,结果正常。 -
如果您在查询之前明确将
$resource设置为-1,您还能重现它吗?我想知道在服务器中断的情况下,值是实际更改还是未更新。 -
@James,好主意。错误是:
Lost connection to MySQL server during query.。如果发生这种情况,手册指出(并且总是如此)mysql_query()将返回FALSE,而不是TRUE...但是它确实证实了这种奇怪行为的怀疑,即如果服务器突然丢弃连接...