【问题标题】:escape single quotes in perl在 perl 中转义单引号
【发布时间】:2016-10-02 18:39:02
【问题描述】:

我有以下代码:

my $body = $in{'article'};

这是我的数据库插入代码:

my $stmt = $db->prepare("insert into news_articles (createdate, userid, status, title, inline, content, attribution, pending) values(unix_timestamp(), $user->{'uid'}, 0, '$title', '$pullquote', '$body', '$attr', 0)");

当我在 $body 变量中有一个单引号时,它似乎失败了。

我尝试过使用以下方法逃避它:

$body = $db->quote($body);

还有:

$body = qq($body);

我对 Perl 很陌生,但是如何在插入之前安全地转义单引号?

【问题讨论】:

标签: mysql perl escaping


【解决方案1】:

$body = $db->quote($body) 是执行此操作的正确方法,但请注意,quote 方法还会添加外引号,因此您可以在 SQL 语句中仅使用 $body 而不是 '$body'

但是,将prepare 与占位符一起使用是迄今为止最好的方法。它为您提供必要的引用,还允许使用不同的execute 参数多次重复使用准备好的语句

我发现这里的文档对于编写具有某种布局以便可读的 SQL 语句很有用。你的代码应该是这样的

my $body = $in{article};

my $stmt = $db->prepare(<<END_SQL);
INSERT INTO news_articles (createdate, userid, status, title, inline, content, attribution, pending)
VALUES (UNIX_TIMESTAMP(), ?, ?, ?, ?, ?, ?, ?)
END_SQL

$stmt->execute($user->{'uid'}, 0, $title, $pullquote, $body, $attr, 0);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-04
    • 2015-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多