2016-06-02 5 views
1

У меня есть следующий код:избежать одиночных кавычек в Perl

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, но как я могу смело бежать одиночные кавычки до вставки?

+2

[Указатель места заполнения] (https://metacpan.org/pod/DBI#Placeholders-and-Bind-Values) почти всегда путь, но 'quote' должен работать , Можете ли вы создать [mcve], который показывает, как установлено значение '$ body' и какие ошибки вы получаете? – ThisSuitIsBlackNot

ответ

3

$body = $db->quote($body) правильный способ сделать это, но обратите внимание, что метод quote также добавляет внешние кавычки, так что вы будете использовать только $body в вашем SQL заявление вместо '$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); 
Смежные вопросы