转义和在perl数据库查询中

Laz*_*man 1 oracle perl

我需要操作数据库中的一些记录并将其值写入另一个表.其中一些值在字符串中有一个'&',即'Me&You'.如果没有找到所有这些值并在任何&之前放置一个\,那么如何将这些值插入到一个没有oracle的表中?

Tan*_*lus 12

使用占位符.而不是放入'$who'你的SQL语句,准备一个?相反,然后绑定$ who,或者以$ who作为适当的参数执行.

my $sth = $dbh->prepare_cached('INSERT INTO FOO (WHO) VALUES (?)');
$sth->bind_param(1, $who);
my $rc = $sth->execute();
Run Code Online (Sandbox Code Playgroud)

这比尝试自己做更安全,更快.(在DBI中有一个"引用"方法,但这比这更好.)


mob*_*mob 8

这绝对是你不需要重新发明的轮子.如果您正在使用DBI,请不要忘记输入; 使用占位符.

例:

my $string = "database 'text' with &special& %characters%";
my $sth = $dbh->prepare("UPDATE some_table SET some_column=?
                         WHERE some_other_column=42");
$sth->execute($string);
Run Code Online (Sandbox Code Playgroud)

DBD::Oracle模块(以及所有其他DBD::xxxxx模块)经过了广泛的测试和实际使用.让它担心如何将文本插入数据库.