【发布时间】:2014-12-18 19:50:10
【问题描述】:
使用下表“技术说明”:
并且,使用以下 SQLi 查询:
SELECT *
FROM
`technotes`
WHERE
`techgroup` LIKE '%dispatch%' OR
`techgroup` LIKE '%30243542%' AND
`expires` >= '2014-12-18' AND
`viewed` NOT LIKE '%30243542%'
预期会返回 alertid 的:23324325 和 23546576(第一个和最后一个)。但相反,我得到了记录 1,3,4,5 被退回。我在操作顺序上遗漏了一些东西,或者 SQLi 选择语句中的某些其他组件格式错误,但不确定是什么。有人可以建议我遗漏或需要更改的内容以使其正常工作吗?
【问题讨论】:
-
“过期”是日期时间字段吗?
-
作为第一步,我会在条件句周围添加括号以确保优先级正确。我不确定 MySQL 是否给予 OR 或 AND 更高的优先级。
-
“过期”字段类型设置为“日期”
-
将前 2 个 OR 条件括在括号中
-
你使用
or和and没有任何()来指定你想要的解析顺序:dev.mysql.com/doc/refman/5.0/en/operator-precedence.html