如何绑定值INSERT INTO mysql perl

时间:2012-03-05 15:37:33

标签: mysql perl bind

我已经得到了下面的代码,但我需要知道如何绑定它们以确保安全性。如果我只用$ new_row替换?并把它放在执行中我得到一个错误。谢谢你的帮助。

foreach my $field (@account_field_order) {
$new_row .= "'" . param($field) . "', ";
}#foreach
$new_row .= "'$status'";
my $dsn = "DBI:mysql:$database";
my $dbh = DBI->connect($dsn, $MYSQLuserid, $MYSQLpassword ) 
          or die $DBI::errstr;
my $sth = $dbh->prepare(qq(INSERT INTO $table VALUES ($new_row) )) or die $DBI::errstr;
$sth->execute() or die $DBI::errstr;

2 个答案:

答案 0 :(得分:5)

您将需要使用占位符,并且从不在字符串中插入变量。如果安全对您很重要,您应该在使用之前使用taint mode并对param值进行去除污染。关于占位符的文档here

尝试类似:

my @values = map param($_), @account_field_order; # add values to array
push @values, $status;                  # for simplicity
$new_row = join ", ", ("?") x @values;  # add ? for each value

... # basically same code as before, except the execute statement:

$sth->execute(@values);      # arguments given will be inserted at placeholders

答案 1 :(得分:0)

如果你的值是哈希值,那就是the insert_hash example in the docs(在prepare_cached下)。如果不使用数组,请根据需要进行调整。