perl dbi准备变量表列名
在使用perl将值插入数据库表时,我已经多次使用以下代码perl dbi准备变量表列名,perl,dbi,Perl,Dbi,在使用perl将值插入数据库表时,我已经多次使用以下代码 my $SRV='xxx'; my $DB='dbname'; my $db = DBI->connect("dbi:Oracle:$SRV/$DB", "user", "pword" ) or die "impossible de se connecter à $SRV / $DB"; my $insert_T1 = "INSERT INTO tablename (ColA, ColB) VALUES ( ?,
my $SRV='xxx';
my $DB='dbname';
my $db = DBI->connect("dbi:Oracle:$SRV/$DB", "user", "pword" ) or die "impossible de se connecter à $SRV / $DB";
my $insert_T1 = "INSERT INTO tablename (ColA, ColB) VALUES ( ?, ?) " ;
my $insert_T1_sth = $db->prepare($insert_T1) ;
在代码的后面,我可以调用下面的代码来进行插入
$insert_T1_sth->execute('val1','val2');
$insert_T1_sth->execute('val3','val4');
所以基本上,当我使用上面的prepare函数时,我可以用问号替换我想要插入的条目,然后将这些问号的值放在后面的execute语句中
所以我的问题是:我能在prepare语句中用问号代替列名吗?我认为不会,因为当我尝试以下操作时,在执行语句所在的行上会出现运行时错误
然后,像以前一样,稍后使用
$insert_T1_sth->execute('colname1','val1','val2');
$insert_T1_sth->execute('colname2','val3','val4');
不能像您尝试的那样,将动态列名与
prepare
一起使用
您的列名不应该为用户所知,因此实际上不需要成为参数的一部分,因为它们不敏感(并且不需要针对SQL注入进行保护)。不过,准备对表演仍然有用
我的建议是为你们每个人准备一个列名,并将它们存储在散列中:
my @col_names = qw(colname1 colname2);
my %inserts;
for my $col (@col_names) {
$inserts{$col} = $db->prepare("INSERT INTO tablename (ColA, $col) VALUES (?, ?)");
}
...
$inserts{colname1}->execute('val1', 'val2');
谢谢你的信息,爸爸,不幸的是我有大约900个专栏names@Chazg76那又怎么样?准备900个不同的insert语句本身并没有什么错。嗯,你的数据库听起来设计得很奇怪,当我看到你需要在不同的列名上插入900个不同的内容时,我的第一反应是你需要重新考虑你的数据库,但谁知道呢,可能有一个很好的理由。。
my @col_names = qw(colname1 colname2);
my %inserts;
for my $col (@col_names) {
$inserts{$col} = $db->prepare("INSERT INTO tablename (ColA, $col) VALUES (?, ?)");
}
...
$inserts{colname1}->execute('val1', 'val2');