希望有人可以帮助,这正在推动我做出。
有人可以告诉我这个选择有什么问题,它目前正确搜索,但它会检查“画廊”中的每个结果,而不仅仅是“类别:夏天”和“状态:已使用”中的结果。
所以我想要它只是在类别“夏天”和状态“使用”时搜索关键字($ 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");
答案 0 :(得分: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%')
答案 1 :(得分:1)
您正在使AND
和OR
运算符短路。尝试通过将OR
放在一个组中来隔离{/ 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%'
)
LIMIT 0 , 10
作为旁注,如果变量的值( s )来自外部,则查询易受SQL Injection
攻击。请查看下面的文章,了解如何防止它。通过使用PreparedStatements
,您可以摆脱在值周围使用单引号。
答案 2 :(得分: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");