我尝试使用架构和表作为参数传递给预备语句的查询 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));
问题在于需要动态设置的架构和表格 - 如上面的代码所示。
答案 0 :(得分:1)
在参数化的SQL语句(PostgreSQL中的预处理语句)中,参数只能代表常量值,而不能代表表名或列名。
PostgreSQL强制执行此限制,无论您使用何种编程语言或驱动程序,都无法解决此问题。这也是故意的而不是错误。
您必须编写一个包含已替换表名和列名的完整SQL语句的字符串并执行该字符串。注意SQL注入 - 使用pg_escape_identifier
之类的函数来转义名称。