2

我正在阅读有关 PDO 和准备好的声明,重点是 Postgres。

当我了解 ps 如何在 PHP 中实现时,我可以注册一个命名查询,然后为它定义变量并多次运行它。但是当 where 子句的使用依赖于参数时会发生什么。

例如,如果!empty($param3)then 我添加了 where 子句,但如果它为空,则不会在查询中使用该子句。

最好的情况是使用过滤器形式来缩小记录列表:如果不使用过滤器,则查询甚至不会使用 WHERE,而所有过滤器都可能被使用,从而导致大的 WHERE 查询。

正如我现在所看到的,我需要为每种情况注册 1 个准备好的语句,但这会导致大量语句需要单独维护和测试。

4

2 回答 2

2

如果要使用预准备语句,请为每种情况注册 1 个预准备语句。

于 2013-09-27T00:33:44.060 回答
1

不要准备你不会执行的查询。

如果 WHERE 子句中的搜索词有差异,确实需要准备不同的 SQL 字符串。

准备好的查询只允许您使用参数代替文字值;也就是说,您通常会在其中放置带引号的字符串或日期,或数字文字。但参数不能用于其他语法,如表名、列名、SQL 表达式、SQL 关键字等。

因此,您必须在准备之前创建 SQL 字符串,具体取决于!empty($param3).

于 2013-09-27T00:41:23.057 回答