繁体   English   中英

SQL选择where子句问题

[英]Sql select where clause issue

希望有人能帮到我。

有人能告诉我这个选择有什么问题吗,它当前可以正确搜索,但它会检查“ Galleries”中的每个结果,而不仅仅是“ category:summer”和“ Status:used”中的结果。

因此,我要执行的操作是仅在关键字“夏季”和状态“已使用”中搜索关键字($ 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");

添加这样的括号:

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%')

您正在短路ANDOR运算符。 尝试通过将OR放在一组中来隔离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 ,如果变量的值(一个或多个 )从外面走了进来。 请查看下面的文章,以了解如何防止它。 通过使用PreparedStatements您可以摆脱在值周围使用单引号的麻烦。

尝试将表达式分组到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");

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM