mysql_num_rows()期望参数1是资源,在第31行的/home/domain/public_html/config.php中给出布尔值

时间:2013-05-13 08:20:06

标签: php mysql

我知道这是非常常见的问题。我有两个托管A和B以及一个mysql基础。在托管A站点工作,但托管B上相同的网页(我从A复制到B)不起作用。主机,登录和密码到日期基地是好的,因为我看到新闻等。但当我尝试登录我的管理面板时,我看到:

Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/dmcmetal/domains/mydomain.com/public_html/config.php on line 31

我添加到我的config.php文件mysql_error();现在我明白了:

 Something is wrong in your syntax obok '=='1' LIMIT 1' w linii 1

这是config.php文件的一部分:

function get_user_data($id=-1) {
if($id==-1) {
    $id=$_SESSION['id'];
}
$result=  mysql_query("SELECT * FROM `users` WHERE `id`=='{$id}' LIMIT 1");
if($result==FALSE)
    die(mysql_error());
if(mysql_num_rows($result)==0) { // 31 line
    return false;
}
return mysql_fetch_assoc($result);

}

任何人都可以知道为什么它可以用于托管A而不能用于托管B?

3 个答案:

答案 0 :(得分:1)

您的查询中存在语法错误,当mysql语法需要单个时,您使用的是double equals。这导致错误,因为没有行数。所以请转到

$result=  mysql_query("SELECT * FROM `users` WHERE `id` = '{$id}' LIMIT 1");

然后我希望您记住mysql_*函数已被弃用,因此我建议您切换为mysqliPDO

答案 1 :(得分:0)

id ='{id}'

而不是

id =='{id}'

你正在做的是检查id的相等性,这是不正确的语法,因为id是列名。

答案 2 :(得分:0)

您收到的错误是因为您的查询在语法上不正确..所以mysql_query()正在退回false ..

因此,转换为mysql_num_rows()的参数为false

请更改

$result=  mysql_query("SELECT * FROM `users` WHERE `id` == '{$id}' LIMIT 1");

$result=  mysql_query("SELECT * FROM `users` WHERE `id` = '{$id}' LIMIT 1");

注意:我建议您在mysql_折旧时切换到mysqli_ *或PDO

查看PDOmysqli

您还可以查看prepared statements