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

mysql_num_rows()希望参数1是资源,布尔值在第31行的/home/domain/public_html/config.php中给出,php,mysql,Php,Mysql,我知道这是一个非常常见的问题。我有两个主机A和B,还有一个mysql数据库。在托管一个站点时可以工作,但在托管B时相同的网页(我将文件从A复制到B)不能完美工作。主机、登录名和日期库密码都可以,因为我看到了新闻等。但当我尝试登录到我的管理面板时,我看到: Warning: mysql_num_rows() expects parameter 1 to be resource, boolean given in /home/dmcmetal/domains/mydomain.com/public_

我知道这是一个非常常见的问题。我有两个主机A和B,还有一个mysql数据库。在托管一个站点时可以工作,但在托管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
我将mysql_error()添加到config.php文件中;现在我明白了:

 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时不起作用吗?

id='{id}'

而不是

id=='{id}'


您要做的是检查id的相等性,这是不正确的语法,因为id是一个列名。

在您的查询中有一个语法错误,当mysql语法需要一个相等时,您使用了双相等。这会导致错误,因为没有行数。所以请换成

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

然后我希望您记住,
mysql.*
函数已被弃用,因此我建议您切换到或

您得到的错误是因为您的查询语法不正确。。因此,
mysql\u query()
正在重新计算
false

因此,传递到
mysql\u num\u rows()
的参数是
false

请换

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

注意:我建议您切换到mysqli_*或PDO,因为mysqli_*已贬值

查看和


您还可以查看。

==
在您的查询中应该是
=
。注:。它们不再得到维护。看到了吗?相反,学习,并使用or-将帮助您决定哪一个。如果选择PDO,
mysql_num_rows
错误不是您的主要错误,您的错误是SQL语法错误。你应该把它作为首要问题,尤其是在标题中。
$result=  mysql_query("SELECT * FROM `users` WHERE `id` = '{$id}' LIMIT 1");