pg_query_params () и заполнители

0

Спасибо за чтение этого. Не могли бы вы дать несколько указаний относительно того, как понимать и решать два вопроса ниже? Я новичок в PHP и PostgreSQL. ОС: OSX 10.9.5, PHP: 5.6.4, PostgreSQL: 9.4.0

  1. Я хотел бы знать причину размещения placeholder в pg_query_params(), которая дает синтаксическую ошибку. Как бы вы решили это? Причина в том, что я хочу, чтобы пользователь указывал имя таблицы при копировании дополнительных данных в таблицу.

Вот фрагмент:

$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. Как и выше. Я хотел бы решить ошибку, потому что я хочу, чтобы пользователь вводил имя таблицы и путь к файлу при копировании данных из файла.

Вот фрагмент:

$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

==

Теги:
osx-mavericks

1 ответ

2
Лучший ответ

Насколько мне известно, PostgreSQL не поддерживает параметризованные утверждения COPY. В документах PG 9.4 в подготовленных операциях (http://www.postgresql.org/docs/9.4/static/sql-prepare.html) можно параметризовать только SELECT, INSERT, UPDATE, DELETE или VALUES.

Вам может потребоваться построить инструкцию COPY и выполнить интерполяцию параметров самостоятельно (с соответствующей очисткой и экранированием для смягчения инъекций и т.д.), А затем отправить его с помощью pg_query.

  • 0
    Ваш ответ очень помог в понимании функции pg_query_params (). Спасибо!
  • 0
    И даже если вы можете параметризовать COPY , вы не можете параметризовать имя таблицы ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню