pg_query_params() 和占位符

pg_query_params() and placeholders

感谢您阅读本文。您能否就如何理解和解决以下两个问题提供一些建议?我是 PHP 和 PostgreSQL 的新手。 OS:OSX 10.9.5,PHP:5.6.4,PostgreSQL:9.4.0

  1. 我想知道在 pg_query_params() 中放置占位符会导致语法错误的原因。你会如何解决这个问题?原因是我希望用户在将其他数据复制到 table.
  2. 时指定一个 table 名称

这是一个片段:

$params = array(strval($_POST['que_str2']));
$myresult = pg_query_params($connection, 'copy  from stdin', $params);
echo "<br />\n$params[0]   <br />\n";

Warning: pg_query_params(): Query failed: ERROR: syntax error at or near "" LINE 1: copy  from stdin ^ in /Library/WebServer/Documents/test.php

my_table 
  1. 与上述问题类似。我想解决这个错误,因为我希望用户在从文件复制数据时输入 table 名称和文件路径。

这是一个片段:

$params = array(strval($_POST['que_str2']), strval($_POST['que_str1']));
$myresult = pg_query_params($connection, 'copy  from  DELIMITERS \',\' CSV', $params);
echo "<br />\n$params[0]   $params[1]<br />\n";

Warning: pg_query_params(): Query failed: ERROR: syntax error at or near "" LINE 1: copy  from  DELIMITERS ',' CSV ^ in /Library/WebServer/Documents/test.php on line 20

my_table /Library/WebServer/Documents/data2.csv

==

据我所知,PostgreSQL 不支持参数化 COPY 语句。根据关于预处理语句 (http://www.postgresql.org/docs/9.4/static/sql-prepare.html) 的 PG 9.4 文档,只有 SELECTINSERTUPDATEDELETEVALUES 语句可以参数化。

您可能需要做的是构建 COPY 语句并自己插入参数(通过适当的清理和转义以减轻注入等),然后使用 pg_query 提交。