mysql_query不返回资源

时间:2012-05-24 22:33:16

标签: php mysql

我一直在StackExchange上下,以及大部分互联网的小网站聚宝盆,寻找任何好的理由我的代码不起作用,但这个让我难过。我想显示特定MySQL表中的总行数,并将计数设置为变量,以便稍后在脚本中使用。当我运行以下命令时,脚本死了,我收到一条PHP警告,告诉我mysql_result()期望参数1是资源,给定字符串。

$conn = mysql_connect('mysql_server', 'username', 'password');
if (!$conn) {
    die('Connect Error ' . mysql_error());
}
mysql_select_db('my_database', $conn);
if (!mysql_select_db('my_database')) {
    die('Could not select database: ' . mysql_error());
}
$max_count_query = ("SELECT COUNT(*) FROM table");
// Perform Query
$max_count_action = mysql_query($max_count_query);
$mcount = mysql_result($max_count_action, 0, 0);
printf("\nNumber of Records to Process: ", $mcount);

StackOverflow的集体天才是怎么想的?

在回应评论时,我还提供了另一个迷你版代码:

$conn = mysql_connect('127.0.0.1', 'username', 'password');
if (!$conn) {
    die('Connect Error ' . mysql_error());
}
mysql_select_db('my_database', $conn);
if (!mysql_select_db('my_database')) {
    die('Could not select database: ' . mysql_error());
}
$max_count_query = ("SELECT COUNT(*) FROM directory_nap");
// Perform Query
$max_count_action = mysql_query($max_count_query);
if (!$max_count_action){
    die('mysql query error: ' . mysql_error());
    }
$mcount = mysql_result($max_count_action, 0, 0);
if (!$mcount){
    die('mysql result error: ' . mysql_error());
    }
printf("\nNumber of Records to Process: ", $mcount);

5 个答案:

答案 0 :(得分:4)

如果table tablename只是一个示例(请参阅bitfox的回答),那么您的代码没有任何问题。我可以在我的测试服务器上使用相同的代码,并通过将表名更改为我知道在我自己的数据库中存在的表名来获得结果。

然而,最令人不安的是,您指出错误mysql_result() expects parameter 1 to be resource, string given - 如果您的SQL有错误,mysql_query返回布尔值(docs),而不是字符串。因此,您要么没有显示与实际使用相同的测试代码,要么您给我们提供了不准确的错误消息。

在某些时候,您必须将字符串分配给变量$max_count_action。这是我发送有故意问题的查询时得到的结果:Warning: mysql_result() expects parameter 1 to be resource, boolean given - 注意“boolean”,而不是字符串。

所以,我认为你的第一步是选择一个不同的表名。也就是说,如果你使用保留字作为表或列名,你仍然可以通过用反引号(`)字符包围字符串来访问它:

SELECT COUNT(*) FROM `table`

第二步是查看$max_count_action发生的事情,将其变成字符串。最后,请始终使用mysql_error进行调试,但我建议使用die为生产代码做一些更好的事情。

// working code on my test server
$max_count_query = ("SELECT COUNT(*) FROM users");
$max_count_action = mysql_query($max_count_query);
$mcount = $max_count_action ? mysql_result($max_count_action, 0) : 'Error: '.mysql_error();
print "\nNumber of Records to Process: ". $mcount;

答案 1 :(得分:1)

错误很可能就在这里:

SELECT COUNT(*) FROM table

”是SQL语言的保留字。你应该改变它。

答案 2 :(得分:1)

问题的原因在代码示例中不明确(可能是错误的表名,查询字符串周围的括号等),但是它中存在许多不准确之处。您可以尝试以下代码,它应该至少修复一些漏洞并提供有关错误的更多详细信息:

$conn = mysql_connect('mysql_server', 'username', 'password');
if ($conn === false) {
    die('Connect Error ' . mysql_error($conn));
}
if (mysql_select_db('my_database', $conn) === false) {
    die('Could not select database: ' . mysql_error($conn));
}
$max_count_query = "SELECT COUNT(*) FROM table";
// Perform Query
$max_count_action = mysql_query($max_count_query, $conn);
if($max_count_action === false) {
    die('Query error ' . mysql_error($conn));
}
$mcount = mysql_result($max_count_action, 0, 0);
if($mcount === false) {
    die('Result retrieval error ' . mysql_error($conn));
}
printf("\nNumber of Records to Process: %s", $mcount);
mysql_free_result($max_count_action);

希望这有帮助,再见!

答案 3 :(得分:0)

您的问题中的“表格”是代码中的占位符还是真实姓名?尝试更改“表格”表格的其他名称,否则我想尝试mysql_fetch_array而不是mysql_result

$max_count_query = "SELECT COUNT(*) FROM t";
// Perform Query
$max_count_action = mysql_query($max_count_query) or die (mysql_error());
$mcount = mysql_fetch_array($max_count_action);
printf("\nNumber of Records to Process: ", $mcount[0]);

答案 4 :(得分:0)

$conn = mysql_connect('mysql_server', 'username', 'password');
if (!$conn) {
    die('Connect Error ' . mysql_error());
}

这没关系,但连接和编码不需要分成两行

mysql_select_db('my_database', $conn);

同样,这是值得怀疑的。如果您使用多个数据库,则在SQL中引用数据库比在PHP代码中跟踪状态更简单,更安全。

if (!mysql_select_db('my_database')) {
   die('Could not select database: ' . mysql_error());
}

你还没做过吗?

$max_count_query = ("SELECT COUNT(*) FROM table");

为什么括号?

// Perform Query

代码中是不是很明显?

$max_count_action = mysql_query($max_count_query);
$mcount = mysql_result($max_count_action, 0, 0);

将db句柄传递给mysql_query调用会更简洁。

您在连接后检查了错误,在切换数据库后检查了错误,但是在mysql_query()之后没有检查错误?

printf("\nNumber of Records to Process: ", $mcount);

mcount参数的格式字符串中没有占位符。尝试:

printf("\nNumber of Records to Process: %d", $mcount);
  

我收到一条PHP警告,告诉我mysql_result()希望参数1是资源,给定字符串。

然后您运行的代码不是您向我们展示的代码; mysql_query()不会返回字符串。