逃避&在perl数据库查询中

时间:2011-10-17 19:34:51

标签: perl oracle

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

2 个答案:

答案 0 :(得分:12)

使用占位符。而不是将'$who'放在SQL语句中,而是使用?相反,然后绑定$ who,或者以$ who作为适当的参数执行。

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

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

答案 1 :(得分: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);

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