PHP准备语句中的自定义where子句

PHP准备语句中的自定义where子句,php,postgresql,pdo,prepared-statement,Php,Postgresql,Pdo,Prepared Statement,我正在读关于PDO的书,并准备了一份声明,重点放在了Postgres上 正如我所理解的ps是如何在PHP中实现的,我可以注册一个命名查询,然后为它定义变量并多次运行它。但是当where子句的使用依赖于参数时会发生什么呢 例如,如果!empty($param3)然后我添加了一个where子句,但是如果它是空的,那么该子句将不会在查询中使用 最好的情况是使用一个过滤器表单来缩小记录列表:如果没有使用过滤器,查询甚至不会使用WHERE,而所有过滤器都可能被使用,从而产生一个大WHERE查询 正如我现在

我正在读关于PDO的书,并准备了一份声明,重点放在了Postgres上

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

例如,如果
!empty($param3)
然后我添加了一个where子句,但是如果它是空的,那么该子句将不会在查询中使用

最好的情况是使用一个过滤器表单来缩小记录列表:如果没有使用过滤器,查询甚至不会使用WHERE,而所有过滤器都可能被使用,从而产生一个大WHERE查询


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

如果您想使用准备好的语句,请为每种情况注册一条准备好的语句。

不要准备您不打算执行的查询

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

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


因此,您必须在准备SQL字符串之前创建它,这取决于应用程序条件,如
!空($param3)

另一个选项是
$select\u query=“select*FROM table\u name”
并添加
$select\u query.=“WHERE param='value'”