Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
perl dbi准备变量表列名_Perl_Dbi - Fatal编程技术网

perl dbi准备变量表列名

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 ( ?,

在使用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 $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');