PHP:在数据库中搜索

PHP:在数据库中搜索,php,Php,我制作了一个普通表单,你可以输入用户的全名并选择性别 现在转到PHP在数据库中进行搜索 $full_name = mysql_real_escape_string($_POST["search"]); $sex = mysql_real_escape_string($_POST["sex"]); list($firstname, $lastname) = array_map('ucfirst', explode(' ', $full_name)); $query = "SELEC

我制作了一个普通表单,你可以输入用户的全名并选择性别

现在转到PHP在数据库中进行搜索

$full_name = mysql_real_escape_string($_POST["search"]);
$sex = mysql_real_escape_string($_POST["sex"]);
list($firstname, $lastname) = array_map('ucfirst', explode(' ', $full_name));
        $query = "SELECT firstname, lastname, id, user_name, sex, last_access, bostadsort FROM users WHERE firstname LIKE '$firstname' OR lastname LIKE '$lastname' AND sex = '$sex'"; 
    $result1 = mysql_query($query) or die(mysql_error());
    $count = mysql_num_rows($result1);
echo $count;

如果我输入Jenni Jackson(存在)并选择“男性”,我仍然可以在$count中获得1,但Jenni Jackson是女性,并且在“性别”列中有女性。。如果$sex的值确实是您在表单中选择的值,并且是正确的,我尝试使用echo$sex查看该值。

您需要在查询中使用括号,如下所示:

WHERE (firstname LIKE '$firstname' OR lastname LIKE '$lastname') AND sex='$sex'";
如果没有括号,您的查询相当于:

WHERE firstname LIKE '$firstname' OR (lastname LIKE '$lastname' AND sex='$sex')";
由于
firstname
条件匹配,因此返回该行


发生这种情况的原因是
超过了
,您需要在查询中使用括号,如下所示:

WHERE (firstname LIKE '$firstname' OR lastname LIKE '$lastname') AND sex='$sex'";
如果没有括号,您的查询相当于:

WHERE firstname LIKE '$firstname' OR (lastname LIKE '$lastname' AND sex='$sex')";
由于
firstname
条件匹配,因此返回该行


这是因为
具有超过

您需要在
WHERE
子句中使用括号,以便数据库知道哪个优先(和或或):


WHERE
子句中需要括号,以便数据库知道哪个优先(AND或or):


您在同一WHERE子句中组合AND和OR条件

你是说

(firstname LIKE '$firstname' OR lastname LIKE '$lastname') AND sex = '$sex'


您在同一WHERE子句中组合AND和OR条件

你是说

(firstname LIKE '$firstname' OR lastname LIKE '$lastname') AND sex = '$sex'


尝试添加一些括号

$query = "
    SELECT 
         firstname, 
         lastname, 
         id, 
         user_name, 
         sex, 
         last_access, 
         bostadsort 
     FROM users 
     WHERE 
        (
         firstname LIKE '$firstname' 
         OR lastname LIKE '$lastname'
        ) 
        AND sex = '$sex'"; 

尝试添加一些括号

$query = "
    SELECT 
         firstname, 
         lastname, 
         id, 
         user_name, 
         sex, 
         last_access, 
         bostadsort 
     FROM users 
     WHERE 
        (
         firstname LIKE '$firstname' 
         OR lastname LIKE '$lastname'
        ) 
        AND sex = '$sex'"; 

(建议)考虑使用MyQLI。BTW是否有问题,或者你只是想显示你的PHP的一些位?(建议)考虑使用MySQL。顺便说一句,是有问题还是你只是想向你展示一些php?他指的是第一个,否则他不会问这个问题;-)如果我要问这些可能性是哪一种,那么SQL解析器也必须猜测(除了SQL有一个优先规则使其猜测)。。。我想说的是,我只是想开玩笑地指出,你不必问,因为a)SQL有一个优先规则,b)TS没有得到他期望的结果。。。我休息case@captaintokyo-我应该在我的评论之后加上:)。。。我不认为你的评论是批评,我自己对此的回应也是开玩笑的。他指的是第一个,否则他不会问这个问题;-)如果我要问这些可能性是哪一种,那么SQL解析器也必须猜测(除了SQL有一个优先规则使其猜测)。。。我想说的是,我只是想开玩笑地指出,你不必问,因为a)SQL有一个优先规则,b)TS没有得到他期望的结果。。。我休息case@captaintokyo-我应该在我的评论之后加上:)。。。我没有把你的评论看作是批评,我自己对此的回应也是开玩笑的。名字很好用,但当我只搜索姓氏时。。e、 g“Jackson”,然后返回0。所以OR不正确吗?添加括号表示性别必须匹配,并且名字或姓氏都应该匹配。如果没有
%
\
,像
那样使用
不是没有用吗?它还有什么其他用途?我在使用%时遇到问题,但这是另一个问题。@Codaddict-也进行了双重测试。当我只键入姓氏时,结果为零。一定是出了什么问题?名字很好用,但当我只按姓氏搜索时。。e、 g“Jackson”,然后返回0。所以OR不正确吗?添加括号表示性别必须匹配,并且名字或姓氏都应该匹配。如果没有
%
\
,像
那样使用
不是没有用吗?它还有什么其他用途?我在使用%时遇到问题,但这是另一个问题。@Codaddict-也进行了双重测试。当我只键入姓氏时,结果为零。一定是出了什么事?