我可以在没有数据库连接的情况下使用DBD :: mysql quote()函数吗?

时间:2012-08-19 23:19:48

标签: mysql sql perl

我正在使用Perl编写.sql文件,而不是直接写入mysql数据库。我需要引用该文件中的字符串。看起来像$ dbh-quote()方法做我想要的。除了我无法弄清楚如何在没有数据库连接的情况下使用它。我做了一个虚拟连接,但是如果没有数据库运行我似乎无法做到这一点,并且要运行这个cron作业的机器将没有。

这个问题类似:Perl DBI without accessing the database并且接受的答案表明“您可能会尝试加载您需要的驱动程序并直接调用该函数”,这是我想要做的,但我不能弄清楚如何做到这一点。

3 个答案:

答案 0 :(得分:4)

可靠的引用要求驱动程序了解连接的字符集/排序规则,因为转义会根据该信息而变化。

这就是为什么在PHP中mysql_escape_string()被mysql_real_escape_string()取代,后者使用数据库连接属性来正确地转义输入字符串。

答案 1 :(得分:3)

听起来你必须弄明白quote做了什么并自己实施。无法访问真正的数据库连接可能会成为一个阻碍。

答案 2 :(得分:0)

听起来答案是响亮的“你做不到”。在任何情况下,这里都是一个引用函数,我根据mysql文档http://dev.mysql.com/doc/refman/5.0/en/string-literals.html提出了需要引用的内容。

我的输入是UTF-8,perl在内部以UTF-8存储字符串,我的输出是UTF-8,我的数据库是UTF-8。鉴于字符集是一致的,我不应该为了逃避目的而担心它。

sub quote(){
    my ($s) = @_;
    $s =~ s/\\\\/\\/g;
    $s =~ s/\'/\\'/g;
    $s =~ s/\"/\\"/g;
    $s =~ s/\x08/\\b/g;
    $s =~ s/\n/\\n/g;
    $s =~ s/\r/\\r/g;
    $s =~ s/\t/\\t/g;
    $s =~ s/\x1A/\\Z/g;
    return $s;
}

我测试了这个功能,它似乎做了我想要的。太糟糕了,这样的东西无法从已经写好的图书馆访问。