Php mysql\u num\u rows():提供的参数不是有效的mysql结果资源(唯一)

Php mysql\u num\u rows():提供的参数不是有效的mysql结果资源(唯一),php,mysql,Php,Mysql,基本上,我从一个表单中提取四个变量的值,然后使用这些值作为WHERE语句从数据库中的表中进行选择。这里我只提供了一段代码,因为我已经验证了正确的值是从表单到相关变量的,并且代码运行良好,当我只检查groupid和memberid时,它会通过if语句进入else语句 groupid是一个4位数字。 memberid是一个3位数的数字。 这个名字是一个全名,就像约翰a史密斯一样 而dob是一个类似1900-10-31的日期 下面是我尝试运行的查询。在我得到MySQL错误后,它会显示消息“Member

基本上,我从一个表单中提取四个变量的值,然后使用这些值作为WHERE语句从数据库中的表中进行选择。这里我只提供了一段代码,因为我已经验证了正确的值是从表单到相关变量的,并且代码运行良好,当我只检查groupid和memberid时,它会通过if语句进入else语句

groupid是一个4位数字。 memberid是一个3位数的数字。 这个名字是一个全名,就像约翰a史密斯一样 而dob是一个类似1900-10-31的日期

下面是我尝试运行的查询。在我得到MySQL错误后,它会显示消息“Member not existing”。我在这里遗漏了什么

$qry="SELECT * FROM members WHERE groupid = $groupid AND memberid = $memberid AND   membername = $name AND memberdob = $dob";
$result=mysql_query($qry);

if(mysql_num_rows($result) == 0)
    {
    echo "Member does not exist";
    }
 else  {....
membername
memberdob

groupid是一个4位数字。memberid是一个3位数的数字。名字是一个全名,像约翰a.史密斯,而dob是一个日期,像1900-10-31

你就是这么想的。黄金法则:

如果您想坚持使用mysql扩展,那么首先使用清理输入。其次,引用传递给查询的变量。因此,与其

$qry = "... WHERE groupid = $groupid ...";

在您的情况下,查询失败的最可能原因是
$name
变量。它包含空格。空间是查询中断的地方。引用变量将解决问题:

$qry = "SELECT *
        FROM members
        WHERE groupid = '" . mysql_real_escape_string($groupid) . "'
        AND memberid = '" . mysql_real_escape_string($memberid) . "'
        AND membername = '" . mysql_real_escape_string($name) . "'
        AND memberdob = '" . mysql_real_escape_string($dob) . "'";
另外,通过错误处理改进查询执行。简单的例子:

$result = mysql_query($qry) or die('Invalid query: ' . mysql_error());
这将返回详细的错误描述,帮助您确定根本原因


至于不推荐的mysql扩展的推荐替代方案:请阅读PHP手册。

由于不了解应用程序的整个上下文,我将假设从表单中检索变量后,变量得到了正确处理

mysql通常会抱怨字符串字段没有正确地用引号括起来。 可能是$name和$memberdob从表单中正确检索,但没有根据需要传递到查询中。 尝试将查询更改为以下内容:

$qry="SELECT * FROM members WHERE 
      groupid = $groupid AND memberid = $memberid AND
      membername = '$name' AND memberdob = '$dob'";

查询失败,请添加错误检查以找出打印$result的原因,以查看它是null还是FALSE?membername和memberdob的值需要被引用可能重复
$result = mysql_query($qry) or die('Invalid query: ' . mysql_error());
$qry="SELECT * FROM members WHERE 
      groupid = $groupid AND memberid = $memberid AND
      membername = '$name' AND memberdob = '$dob'";