我正在阅读关于PDO和准备好的声明,重点是Postgres。
据我了解ps是如何在PHP中实现的,我可以注册一个命名查询,然后为它定义变量并多次运行它。但是当where子句的使用取决于参数时会发生什么。
例如,如果是!empty($param3)
,那么我添加一个where子句,但如果它是空的,那么该子句将不会在查询中使用。
最好的情况是缩小记录列表的过滤器表单:如果没有使用过滤器,查询甚至不会使用WHERE,而可能会使用所有过滤器,从而产生大的WHERE查询。
正如我现在所看到的,我需要为每种情况注册1个预备语句,但这会导致大量语句需要单独维护和测试。
答案 0 :(得分:2)
如果要使用预准备语句,请为每种情况注册1个预准备语句。
答案 1 :(得分:1)
不要准备您不会执行的查询。
如果WHERE子句中的搜索项有差异,则需要准备不同的SQL字符串。
准备好的查询允许您仅使用参数代替文字值;也就是说,您通常会在其中放置带引号的字符串或日期,或数字文字。但参数不能用于其他语法,如表名,列名,SQL表达式,SQL关键字等。
因此,您必须在准备之前创建SQL字符串,具体取决于!empty($param3)
等应用程序条件。