1

希望有人可以帮助这正在推动我。

谁能告诉我这个选择有什么问题,它目前可以正确搜索,但它会检查“画廊”中的每个结果,而不仅仅是“类别:夏季”和“状态:使用”中的结果。

所以我想要它做的是搜索关键字($find),只有当它们属于“夏季”类别和“使用”状态时。任何想法我需要做什么。大声笑在这一点上会采取任何措施。强调:)

$result = mysql_query("
  SELECT
     Gallery_URL,
     Thumbnail_URL,
     Nickname,
     Description 
  FROM Galleries
  WHERE 
    Category = 'summer' 
    AND Status = 'Used'
    AND Nickname LIKE '%$find1%'
    OR Nickname LIKE '%$find2%'
    OR Nickname LIKE '%$find3%'
    OR Description LIKE '%$find1%'
    OR Description LIKE '%  $find2%'
    OR Description LIKE '%$find3%'
  LIMIT 0 , 10");
4

3 回答 3

1

像这样添加括号:

SELECT Gallery_URL, Thumbnail_URL, Nickname, Description 
FROM Galleries  
WHERE 
   Category = 'summer' 
   AND Status = 'Used' 
   AND (Nickname LIKE '%$find1%' 
   OR Nickname LIKE '%$find2%' 
   OR Nickname LIKE '%$find3%' 
   OR Description LIKE '%$find1%' 
   OR Description LIKE '%  $find2%' 
   OR Description LIKE '%$find3%')
于 2013-04-13T14:20:40.827 回答
1

您正在使ANDandOR运算符短路。尝试OR通过将它们放在一个组中来隔离它们,

SELECT  Gallery_URL, 
        Thumbnail_URL, 
        Nickname,
        Description 
FROM    Galleries 
WHERE   Category = 'summer' AND 
        Status = 'Used' AND 
        (
            Nickname LIKE '%$find1%' OR 
            Nickname LIKE '%$find2%' OR 
            Nickname LIKE '%$find3%' OR 
            Description LIKE '%$find1%' OR 
            Description LIKE '% $find2%' OR 
            Description LIKE '%$find3%' 
        )
LIMIT   0 , 10

作为旁注,SQL Injection如果变量的值(s)来自外部,则查询很容易受到攻击。请看下面的文章,了解如何预防。通过使用PreparedStatements,您可以摆脱在值周围使用单引号。

于 2013-04-13T14:21:05.130 回答
0

尝试对 where 子句中的表达式进行分组。例如

$result = mysql_query("SELECT Gallery_URL, Thumbnail_URL
, Nickname, Description 
FROM Galleries 
WHERE Category = 'summer' 
AND Status = 'Used' 
AND (Nickname LIKE '%$find1%' 
OR Nickname LIKE '%$find2%' 
OR Nickname LIKE '%$find3%' 
OR Description LIKE '%$find1%' 
OR Description LIKE '% $find2%' 
OR Description LIKE '%$find3%') 
LIMIT 0 , 10");
于 2013-04-13T14:23:11.480 回答