在Postgresql中使用模式和表的参数值

时间:2017-11-06 07:15:32

标签: php postgresql

我尝试使用架构作为参数传递给预备语句的查询 pg_query_params 像这样:

$searchSchema = 'mySchema';
$searchTable = 'myTable';
$searchColumn = 'searchColumn';
$searchValue = 'some value';

$selQuery = "SELECT *

FROM $1.$2  --fails here

WHERE someColumn like $3;";

$rs = pg_query_params($db, $selQuery , array($searchSchema, $searchTable, $searchColumn, $searchValue));

问题在于需要动态设置的架构和表格 - 如上面的代码所示。

1 个答案:

答案 0 :(得分:1)

在参数化的SQL语句(PostgreSQL中的预处理语句)中,参数只能代表常量值,而不能代表表名或列名。

PostgreSQL强制执行此限制,无论您使用何种编程语言或驱动程序,都无法解决此问题。这也是故意的而不是错误。

您必须编写一个包含已替换表名和列名的完整SQL语句的字符串并执行该字符串。注意SQL注入 - 使用pg_escape_identifier之类的函数来转义名称。