Подтвердить что ты не робот

Пример подготовленного оператора INSERT с использованием Ruby pg gem

Был ли какой-то поиск в Google примерно на полдня, и я не могу найти образец подготовленного оператора INSERT, используя pg gem (драгоценный камень postgresql ruby).

Я попробовал это (посмотрев на документ gem):

def test2
    conn = PG.connect( dbname: 'db1' )
    conn.prepare("statement1", 'INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?)')
end

Но я получаю следующую ошибку:

pgtest.rb:19:in `prepare': ERROR:  syntax error at or near "," (PG::Error)
LINE 1: INSERT INTO table1 (id, name, profile) VALUES (?, ?, ?)
                                                        ^
from pgtest.rb:19:in `test2'
from pgtest.rb:25:in `<main>'
4b9b3361

Ответ 1

Жемчуг pg хочет, чтобы вы использовали пронумерованные заполнители ($1, $2,...) вместо позиционных заполнителей (?):

conn = PG.connect(:dbname => 'db1')
conn.prepare('statement1', 'insert into table1 (id, name, profile) values ($1, $2, $3)')
conn.exec_prepared('statement1', [ 11, 'J.R. "Bob" Dobbs', 'Too much is always better than not enough.' ])

В прекрасном руководстве есть следующее:

- (PGresult) prepare(stmt_name, sql[, param_types ])
[...]
Параметры связывания PostgreSQL представлены в виде запросов от $1, $1, $2 и т.д. Внутри SQL-запроса.

И снова для exec_prepared:

Параметры связывания PostgreSQL представлены в виде запросов в виде $1, $1, $2 и т.д. 0-й элемент массива params привязан к $1, 1-й элемент привязан к $2 и т.д.