基本上我从表单中提取四个变量的值,然后使用这些值作为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 {....
答案 0 :(得分:2)
$qry="SELECT * FROM members
WHERE groupid = $groupid
AND memberid = $memberid
AND membername = '$name'
AND memberdob = '$dob'";
在membername
和memberdob
答案 1 :(得分:2)
groupid是一个4位数字。 memberid是一个3位数字。 name是像John A. Smith这样的全名,dob的日期是1900-10-31
这就是你的想法。黄金法则:never trust any input from user。
如果你想坚持使用mysql扩展,那么首先要用mysql_real_escape_string
清理输入。其次,引用传递给查询的变量。所以,而不是
$qry = "... WHERE groupid = $groupid ...";
DO
$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手册中的Choosing an API。
答案 2 :(得分:1)
如果不了解应用程序的整个上下文,我将假设从表单中检索变量后会正确处理。
如果字符串字段没有正确用引号括起来,那么它通常会抱怨字符串字段。 可能是从表单中正确检索了$ name和$ memberdob,但是根本不会将其传递给查询。 尝试将您的查询更改为以下内容:
$qry="SELECT * FROM members WHERE
groupid = $groupid AND memberid = $memberid AND
membername = '$name' AND memberdob = '$dob'";