読者です 読者をやめる 読者になる 読者になる

PDO で1MB以上のカラムを取得できない場合

PHP

PDOでMySQLのLONGBLOBカラムの値を取得しようとしたら、綺麗に1MBのところで切れる。いろいろ検索すると、

http://bugs.php.net/bug.php?id=36345&edit=1 や、http://bugs.php.net/bug.php?id=38015 が見つかった。
PDO::MYSQL_ATTR_MAX_BUFFER_SIZE がデフォルトで1MBになっているのが原因。
この値の設定方法は以下のとおり。

以下は意図したとおりに動作しない。

var_dump( $db->getAttribute(PDO::MYSQL_ATTR_MAX_BUFFER_SIZE) );
var_dump( $db->setAttribute(PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, 1024*1024*10 ) );

PDOの作成時にしか設定できない。

$db = new PDO("mysql:host=$dbhost; dbname=$dbname", DBUSER, DBPASSWD, array(PDO::MYSQL_ATTR_MAX_BUFFER_SIZE=>1024*1024*10));

これでOK。