场景:用perl写了个脚本,要将一些python、perl、shell语言写的脚本,批量读取并存到mysql中,由于脚本里有各种特殊字符,如单双引号,转义符,反斜杠,通过传统的转义符\并不能解决所有问题
$script_content =~ s/'/\\'/g; $script_content =~ s/"/\\"/g;
这种转义只能解决单双引号的问题,如果脚本内容里有\符号或者/符号,就无解了
因此,就要使用DBI的:
Placeholders and Bind Values
占位符和绑定值
my $sql = "insert into command_script(name,content,creater) values('$script',?,'flw521521');"; my $sth = $dbh_mbase->prepare($sql); $sth->execute("$script_content") or die("SQL Failed:$sql\n");
如上,在脚本prepare的时候,脚本内容是用占位符?表示,因此在prepare不会报错,在execute时,绑定具体的值即可
实践证明,不管你脚本里有任何特殊符号,此方法都100%有效,no error