perl - 如何使用 Perl、DBI 和占位符插入到 PostgreSQL 中?

标签 perl postgresql dbi

我正在尝试向 pSQL 表中插入一行,同时指定键和值作为占位符:

my @keys = keys %db_entr;                                                            
my @vals = values %db_entr;

my @items = (@keys, @values);

my $dbh = DBI->connect("DBI:Pg:dbname=testdb;host=localhost", "username", 'password', {'RaiseError' => 1});                                                                   
my $sth = $dbh->prepare("INSERT INTO grid ( ?, ?, ? ) values ( ?, ?, ? )");
my $rows = $sth->execute(@items);                                                    
print "$rows effected\n";

但是,无论我做什么,这都会给我一个错误:

DBD::Pg::st execute failed: ERROR:  syntax error at or near "$1"
LINE 1: INSERT INTO grid ( $1, $2, ...
                           ^ at ./file.pl line 262, <STDIN> line 11.

有没有人知道我可能做错了什么?

最佳答案

您不能像这样对列名使用占位符:

INSERT INTO grid (?, ?, ?) VALUES (?, ?, ?)

您必须明确指定列名,并且只能对值使用占位符:

INSERT INTO grid (x, y, z) VALUES (?, ?, ?)

关于perl - 如何使用 Perl、DBI 和占位符插入到 PostgreSQL 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14212567/

相关文章:

linux - 如何从适用于其子项的 Perl 脚本中设置 ulimit?

html - 将 HTML 源渲染为图像(png、gif) - Cocoa、Applescript、Automator 一切都受欢迎

mysql - 如何从 Perl 脚本创建 MySQL 数据库?

mysql - 如何检查 Perl 模块 (DBD::mysql) 是否正确安装?

perl - fork + exec + caller 不应该等待 child

用于匹配缩进连续行的正则表达式

java - 如何在单个 JdbcTemplateexecute() 和 PostgreSQL 中记录多个 sql 查询的进度

sql - 返回值交叉连接

ios - 同步两个数据库源的算法?

mysql - Perl DBI MySQL 插入占位符和外键