PDO で1MB以上のカラムを取得できない場合
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。