perl向数据库中插入特殊字符时遇到的问题

发布时间:2019-09-30编辑:脚本学堂
perl向数据库中插入一段文章,遇到sql错误,发现输入的数据中含有一些特殊字符,例如单引号、双引号、$等特殊字符。

perl向数据库中插入一段文章,遇到sql错误,发现输入的数据中含有一些特殊字符,例如单引号、双引号、$等特殊字符。
注意:php的函数是addslashes(),perl里对应函数是quote()。

举例说明:
需要输入数据库的数据列名为city,值为Xi'an
 

复制代码 代码如下:

use DBI;
my $dsn="DBI:mysql:$db_name:localhost";
my $dbh=DBI->connect($dsn,$db_user,$db_pass,{RaiseError=>1});

my $city=$dbh->quote("Xi'an");
$dbh->do(qq{insert into citylist values($city)});
$dbh->disconnect();

这样,数据就可以顺利的写入数据库了。
其实,quote方法的本质就是使用一种特殊的符号作为数值的分界符,避免和我们常用的特殊字符发生冲突,导致数据库操作失败。
 

复制代码 代码如下:
my $sth = $dbh->prepare(q{
INSERT INTO sales (product_code, qty, price) VALUES (?, ?, ?)
}) or die $dbh->errstr;
while (<>) {
chomp;
my ($product_code, $qty, $price) = split /,/;
$sth->execute($product_code, $qty, $price) or die $dbh->errstr;
}