warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.

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;
バイナリデータはアスキーコードのシングルクォート「'」を含んでいる可能性があり、これが 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;

Perl で、JPEG の画像を扱う方法

グラフィックライブラリである GD を使用する。GD は PNG をサポート JPEG は必須だと思われるがその場合には (CPANの GD ではなくライブラリの) GD 自体、jpeg6b というライブラリが必要である。ない場合はインストールが必要である。ウェブでの JPEG 画像の表示は、以下のサンプルを参考に、宿題として考えてみて欲しい。 使用するモジュール
use GD;
#!/usr/bin/perl

use GD;
open (OLD, "original.jpg") || die "cannot open mayon.jpg¥n";
$oldImage = newFromJpeg GD::Image(¥*OLD) || "Cannot make old image object¥n";

@bound = $oldImage->getBounds();
print "original width: $bound[0] original height: $bound[1] ¥n";
$newImage = new GD::Image(40, 40) || die "cannot make new image object¥n";
$newImage->copyResized($oldImage, 0, 0, 0, 0, 40, 40, $bound[0], $bound[1]);
open NEW, ">nail.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;

1;
グラフィックライブラリである GD を使用する。GD は PNG をサポート JPEG は必須だと思われるがその場合には (CPANの GD ではなくライブラリの) GD 自体、jpeg6b というライブラリが必要である。ない場合はインストールが必要である。ウェブでの JPEG 画像の表示は、以下のサンプルを参考に、宿題として考えてみて欲しい。 使用するモジュール
use GD;
#!/usr/bin/perl

use GD;
open (OLD, "original.jpg") || die "cannot open mayon.jpg¥n";
$oldImage = newFromJpeg GD::Image(¥*OLD) || "Cannot make old image object¥n";

@bound = $oldImage->getBounds();
print "original width: $bound[0] original height: $bound[1] ¥n";
$newImage = new GD::Image(40, 40) || die "cannot make new image object¥n";
$newImage->copyResized($oldImage, 0, 0, 0, 0, 40, 40, $bound[0], $bound[1]);
open NEW, ">nail.jpg";
binmode NEW;
print NEW $newImage->jpeg;
close OLD;
close NEW;

1;