mysql_query() 为 FALSE 但 mysql_error() 为空

Posted

技术标签:

【中文标题】mysql_query() 为 FALSE 但 mysql_error() 为空【英文标题】:mysql_query() is FALSE but mysql_error() is blank 【发布时间】:2011-10-28 20:00:32 【问题描述】:

我正在运行由几个内部查询构建的相当复杂的查询。该查询在其开头包含 SQL_CALC_FOUND_ROWS。不幸的是,只能获取行数(我无法获取结果本身)。

我决定摆脱 SQL_CALC_FOUND_ROWS 并运行两个不同的查询,一个计算行数,第二个获取它们。在这种情况下,我可以检索结果,但 COUNT(*) 查询的行为很奇怪。我就是这样做的:

    执行 COUNT(*) 查询 mysql_query() 返回 FALSE mysql_error() 在 COUNT(*) 查询返回空字符串后直接运行

代码是:

$sqlCount = "SELECT COUNT(*) AS c FROM ... WHERE ...";
$resultCount = mysql_query($sqlCount);
echo "RESULT COUNT: " . ($resultCount === FALSE) . "<br />";//it returns 1(true)
echo mysql_error(); //it returns nothing (blank string)

另外 mysql_errno() 返回 0

对于这种奇怪的情况,你能找到合理的解释吗?

【问题讨论】:

请贴出代码以更恰当地帮助您。 请给我们看一些实际的 php 代码。 $resultCount=mysql_fetch_array(mysql_query($sqlCount));回声“结果计数:”。 $resultCount[0]; 你是先用mysql_connect吗? 您是否启用了完整的错误报告?许多 PHP 函数倾向于在满足错误条件时抛出警告,并且它们通常提供无法在其他任何地方收集的信息。 【参考方案1】:

能否请您填写...空白并尝试

<?php
error_reporting(E_ALL);
ini_set('display_errors', true);

$mysql = mysql_query('..', '..', '..') or die(mysql_error());
mysql_select_db('...', $mysql) or die(mysql_error($mysql));

echo '<pre>Debug: mysql_get_server_info='; var_dump(mysql_get_server_info($mysql)); echo "</pre>\n";
echo '<pre>Debug: mysql_get_client_info='; var_dump(mysql_get_client_info()); echo "</pre>\n";

$sqlCount = "SELECT COUNT(*) AS c FROM ... WHERE ...";
echo '<pre>Debug: sqlCount='; var_dump($sqlCount); echo "</pre>\n";
$resultCount = mysql_query($sqlCount, $mysql);
echo '<pre>Debug: resultCount='; var_dump($resultCount); echo "</pre>\n";
echo '<pre>Debug: mysql_error='; var_dump(mysql_error($mysql)); echo "</pre>\n";
echo '<pre>Debug: mysql_errno='; var_dump(mysql_errno($mysql)); echo "</pre>\n";

然后发布输出?

【讨论】:

【参考方案2】:

这很奇怪,因为带有 SQL_CALC_FOUND_ROWS 的 select 子句返回行,而附加查询将返回行数。如果你使用

$result = mysql_query('SELECT SQL_CALC_FOUND_ROWS * from table');
$total = mysql_query('SELECT FOUND_ROWS()');
process $result.

你应该不会有任何问题。

【讨论】:

【参考方案3】:

我在您的代码中没有发现任何错误。请尝试将您的 mysql_query 行更改为

 $resultCount = mysql_query($sqlCount) or die(mysql_error() ." <-- There was an error when proccessing query");

它看起来很奇怪,但可以帮助你

【讨论】:

以上是关于mysql_query() 为 FALSE 但 mysql_error() 为空的主要内容,如果未能解决你的问题,请参考以下文章

fullCalendar 将所有内容显示为 allDay

MySQL 性能优化的最佳20多条经验分享

Sequelize包括范围为1的对象:m constraint = false

从 mysql_query 转换为准备好的语句 (mysqli/PDO)?必要的?

错误:调用未定义的函数 mysql_query() [重复]

php删除一条mysql记录 怎么判断是不是删除成功,