- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有两个问题,第一个问题如标题所述,我需要在其中进行带有 AND/OR 的动态查询。我完全理解 AND 部分(我已经做了很多)但是,OR 部分让我很困惑,因为看下面的 sql :
$sql = SELECT * FROM table WHERE 1
然后,如果满足条件,则添加 OR 语句:
if(isset($_POST['OR'])){
$sql. = " OR peaches = :good";
}
然后查询将返回 WHERE 1 OR peaches = :good
同样我理解了AND的部分,但是我不明白如何设置OR的部分。
This is how I have set up the AND / OR selection (and this works)
我面临的第二个问题是来自同一脚本的代码片段(请阅读代码注释):
$sql .= " GROUP BY anum"; // I always group BY anum no matter what
if ($count !== "") { // if COUNT is not ""
$sql .= " HAVING COUNT(session.anum) :count"; // Then I want the user to be able to choose the operator (> < => =< =) and the dynamic number for it to use
$placeholder[':count'] = $count; // Then add the key :count to an array with the value of $count
}
$dynamic = $this->db->conn_id->prepare($sql);
$dynamic->execute($placeholder);
如您所见,我给命名参数 (:count) 赋予了 $count 的值,但这“不起作用”。
是否有可能做我想做的事 ($sql .= "HAVING COUNT(session.anum) :count";
)
如果没有,那么我可以这样做:$sql .= "HAVING COUNT(session.anum) $count";
但这会破坏 PDO 的目的。
任何帮助都会很棒
最佳答案
问题 1:
一些开发人员使用 WHERE 1
的原因当他们有可选的搜索词时,像 TRUE AND <condition>
这样的表达式始终等于 <condition>
.这是基本的 bool 代数。
但是对于OR
却不是这样的表达式。 TRUE OR <condition>
总是很简单 TRUE
.您可以修改基本查询以使用 WHERE 0
这样当你附加一个 OR
结果显示为 WHERE 0 OR <condition>
.任何类似 FALSE OR <condition>
的表达式始终等于 <condition>
.
如果你需要同时支持 AND
和 OR
在同一个 SQL 查询中,您需要开始在术语周围加上括号,以便它们按照您想要的方式进行计算。我不打算解释boolean algebra和 MySQL's operator precedence在这个 StackOverflow 答案中。但只要简单地附加 .=
就够了当您混合使用 AND
时将无法工作和 OR
条款。
问题 2:
参数非常有用,但它们并不能解决动态 SQL 的所有情况。您可以使用 SQL 参数来代替 单个文字值,但别无他法。
IN( )
谓词)您必须使用字符串插值在 HAVING 子句中包含用户选择的运算符。
当您需要插入动态内容且不能使用参数时,建议使用白名单 以避免 SQL 注入(inject)的风险。
关于php - 动态 PDO 查询 - 使用 AND/OR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16598065/
我是一名优秀的程序员,十分优秀!