【发布时间】:2016-12-15 11:22:57
【问题描述】:
我在 WHERE 子句中使用了一个非常复杂的准备好的语句,其中包含各种条件,并且在某一时刻,我实际上需要具有一个更具体条件的相同语句。创建两个不同的语句是一种不好的方法,因为它们共享大部分查询字符串,当我更新一个时,我也必须更新另一个。到目前为止,我尝试使用这个:
SELECT columns
FROM tables
WHERE manyConditions AND (specificColumn = ? OR ? = NULL)
在这种情况下,我可以绑定一个任意参数和 NULL 以使特定条件对不需要它的查询 ($pdo->execute([/* ... */, -1, null])) 无用,同时在绑定适当的值和其他内容时仍然能够通过 specificColumn 进行过滤这不是 NULL ($pdo->execute([/* ... */, 'specific value', true]))。
这是一种防止代码重复的非常肮脏的方法,在大多数情况下,我不得不绑定另外两个变量。
有没有更优雅的方法来防止代码重复?
【问题讨论】:
-
请留下一些建设性的反馈,说明您为什么不赞成这个问题 - 也许有什么可以改进的?
-
不要因为投反对票而难过我有同样的经历,但我从来没有得到任何答案......
-
反对者至少可以发表评论
标签: php mysql pdo binding prepared-statement