-1

基本上,我从一个表单中提取四个变量的值,然后使用这些值作为 WHERE 语句从我的数据库中的表中进行选择。我在这里只提供了我的代码片段,因为我已经验证了正确的值来自表单到有问题的变量,并且代码运行良好,并且当我只检查时将 if 语句移到我的 else 语句中groupid 和 memberid。

groupid 是一个 4 位数字。memberid 是一个 3 位数字。name 是全名,例如 John A. Smith,dob 是日期,例如 1900-10-31

我试图运行的查询如下。在我收到 MySQL 错误后,它确实显示消息“成员不存在”。我在这里想念什么?

$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  {....
4

3 回答 3

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

加上引号membernamememberdob

于 2012-07-12T20:44:38.277 回答
2

groupid 是一个 4 位数字。memberid 是一个 3 位数字。name 是全名,例如 John A. Smith,dob 是日期,例如 1900-10-31

你是那样想的。黄金法则:永远不要相信用户的任何输入

如果你想坚持使用 mysql 扩展,那么首先使用mysql_real_escape_string. 其次,引用传递给查询的变量。所以,而不是

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

$qry = "... WHERE groupid = '" . mysql_real_escape_string($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 手册中的选择 API

于 2012-07-12T21:14:27.777 回答
1

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

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

$qry="SELECT * FROM members WHERE 
      groupid = $groupid AND memberid = $memberid AND
      membername = '$name' AND memberdob = '$dob'";
于 2012-07-12T21:24:13.597 回答