Perl: Обновите Несколько строк с одним MySQL Call

Кажется, что это не может быть возможно, но эй я мог бы также спросить, я мог быть неправым. Задавался вопросом, существует ли так или иначе, чтобы жемчуг обновил несколько строк с помощью одного вызова MySQL, я использую DBI.

Любая справка или обратная связь значительно ценились бы, это возможно в MSSQL через ASP, и ASP.net так задавался вопросом, если также возможно через жемчуг на MySQL.

Спасибо за Ваши отзывы!

6
задан DoctorLouie 21 January 2010 в 00:28
поделиться

1 ответ

Во-первых и самое главное, вы абсолютно не должны интерполировать переменные непосредственно в ваши SQL-строки. Это оставляет открытой возможность атак SQL-инъекций. Даже если эти переменные не поступают от пользовательского ввода, это оставляет открытой возможность опасных ошибок, которые могут испортить ваши данные.

Драйвер MySQL DBD действительно поддерживает несколько операторов, хотя по умолчанию он отключен в качестве функции безопасности. Смотрите mysql_multi_statements в разделе Class Methods документации DBD::mysql.

Но гораздо лучшим решением, которое решает обе проблемы сразу и более переносимо, является использование подготовленных операторов и значений плейсхолдеров.

my $sth = $dbh->prepare("UPDATE LOW_PRIORITY TableName SET E1=?,F1=? WHERE X=?");

Затем получить свои данные в каком-то цикле:

while( $whatever) { 
    my ( $EC, $MR, $EM ) = get_the_data();
    $sth->execute( $EC, $MR, $EM );
}

Вам нужно подготовить оператор только один раз, а значения плейсхолдеров заменяются (и гарантированно правильно цитируются) драйвером DBD.

Подробнее о плейсхолдерах читайте в DBI docs.

.
14
ответ дан 8 December 2019 в 13:00
поделиться
Другие вопросы по тегам:

Похожие вопросы: