Perl で、バイナリデータを MySQL に登録する

バイナリデータはアスキーコードのシングルクォート「'」を含んでいる可能性があり、これが SQL文 (MySQL) のリテラルを表すためにエスケープする必要が出てくる。以下のように prepare → execute というように2行に分ければ execute の中で prepare の ? を埋め込んでくれるからシングルクォートの問題は考えなくてよくなる。

使用するモジュール


use DBI;
# 要 DBD::MySQL
#!/usr/bin/perl use DBI; $TABLE_NAME = 'テーブル名'; $DB = DBI->connect(...); my $sth = $DB->prepare(qq|INSERT INTO $TABLE_NAME (
                                               `id`,
                                               `mimetype`,
                                               `object`,
                                               `created`,
                                               `updated`
                                              )
                                              VALUES (?, ?, ?, ?, ?)|
                   );
$sth->execute(
          $id,
          $miemetype,
          $object,
          $NOW,
          $NOW
         );
$DB->disconnect(); 1;

Comments