-1

所以我得到的错误是这个 mysql_num_rows() 期望参数 1 是资源,在 /home 第 80 行中给出的布尔值

这是我的代码

}if($action['result'] != 'error'){

        mysql_query  ("INSERT INTO Matching VALUES('$firstName','$lastName','$buddy','$party','$sex','$req_sex','$skill','$req_skill','$phone')");
        $match_buddy= mysql_query("SELECT * FROM Matching WHERE Buddytype='$buddy'");
        $numrow_buddy = mysql_num_rows($match_buddy);
        if($numrow_buddy < $party-1)
    {
        echo "no matches";
        }if($numrow_buddy >= $party-1)
        {echo "$numrow_buddy";
        //matching the sex
Line 80     $match_sex= mysql_query("SELECT * FROM Matching WHERE Sex='$req_sex' AND First Name !='$firstname' AND Last Name !='$lastName'");
        $numrow_sex = mysql_num_rows($match_sex);

            if($req_sex == 3)
    {       // if they dont care which sex they have move automatically onto skill
            $match_skill= mysql_query("SELECT * FROM Matching WHERE Skill='$req_skill', First Name !='$firstname', Last Name !='$lastName'");
            $numrow_skill = mysql_num_rows($match_skill);
4

2 回答 2

1

您的直接问题是您需要在其中包含空格的列名 ( First Nameand ) 周围使用反引号。Last Name因此改变

$match_sex= mysql_query("SELECT * FROM Matching WHERE Sex='$req_sex' AND First Name !='$firstname' AND Last Name !='$lastName'");

$match_sex= mysql_query("SELECT * FROM Matching WHERE Sex='$req_sex' AND `First Name` !='$firstname' AND `Last Name` !='$lastName'");

您的第二个选择语句也是如此。

附带说明:您的代码容易受到 SQL 注入的攻击。切换到mysqli扩展并使用参数化查询。

其他需要考虑的事情:正如@bksi 在他的回答中所说,最好计算数据库端的行数并只返回数字,而不是将所有数据拉到客户端。除此之外,您可以使用条件计数技术通过这样的查询一次性获得所有计数

SELECT SUM(CASE WHEN Sex = '$req_sex' THEN 1 ELSE 0 END) numrow_sex,
       SUM(CASE WHEN Skill = '$req_skill' THEN 1 ELSE 0 END) numrow_skill
  FROM Matching 
 WHERE `First Name` != '$firstname', `Last Name` != '$lastName'"
于 2013-06-02T01:30:47.980 回答
0

mysql_query 将返回结果资源,或者false如果有错误。
尝试echo(mysql_error())在 mysql_query 之后查看实际错误是什么。

于 2013-06-02T01:30:33.467 回答