pg_query_params()和占位符

时间:2015-01-13 14:48:34

标签: php postgresql osx-mavericks

感谢您阅读本文。您是否会就如何理解和解决以下两个问题提供一些指导?我是PHP和PostgreSQL的新手。操作系统:OSX 10.9.5,PHP:5.6.4,PostgreSQL:9.4.0

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

    $params = array(strval($_POST['que_str2']));
    $myresult = pg_query_params($connection, 'copy $1 from stdin', $params);
    echo "<br />\n$params[0]   <br />\n";
    
    Warning: pg_query_params(): Query failed: ERROR: syntax error at or near "$1" LINE 1: copy $1 from stdin ^ in /Library/WebServer/Documents/test.php
    
    my_table 
    
    1. 与上述问题类似。我想解决错误,因为我希望用户在从文件复制数据时键入表名和文件路径。
    2. 这是一个片段:

      $params = array(strval($_POST['que_str2']), strval($_POST['que_str1']));
      $myresult = pg_query_params($connection, 'copy $1 from $2 DELIMITERS \',\' CSV', $params);
      echo "<br />\n$params[0]   $params[1]<br />\n";
      
      Warning: pg_query_params(): Query failed: ERROR: syntax error at or near "$1" LINE 1: copy $1 from $2 DELIMITERS ',' CSV ^ in /Library/WebServer/Documents/test.php on line 20
      
      my_table /Library/WebServer/Documents/data2.csv
      

      ==

1 个答案:

答案 0 :(得分:2)

据我所知,PostgreSQL不支持参数化COPY语句。根据准备好的陈述(http://www.postgresql.org/docs/9.4/static/sql-prepare.html)的PG 9.4文档,只有SELECTINSERTUPDATEDELETEVALUES陈述可以是参数化。

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