PDOでMySQLに外部SQLファイルを流す

DROP TABLE IF EXISTS hogehoge;
CREATE TABLE hogehoge ( 〜 );

みたいなhoge.sqlがあるとします。このファイルを読み込んでPDOに投げる、コマンドラインで動くphpスクリプトがあります。夏頃にFedoraCore5 + php5.1.4 + MySQL5.0.22で動かした時にはちゃんと動いたんですが、FodoraCore5 + php5.1.6. + MySQL5.0.27だと、

Cannot execute queries while other unbuffered queries are active. Consider using PDOStatement::fetchAll(). Alternatively, if your code is only ever going to run against mysql, you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute.

というエラーメッセージで止まってしまいました。平たく言うと「バッファされていないクエリが残ってるから次が実行できないYo!」ということですかね。日本語の情報がサッパリ見当たらなかったのですが、

[PHPLondon-discuss] PDO / buffered query confusion
http://lists.phase.org/pipermail/phplondon-discuss/2006-June/002585.html
http://lists.phase.org/pipermail/phplondon-discuss/2006-June/002586.html

このあたりがちょうどその辺のやり取りみたいです。バッファが有効になっていないと、一度に複数のクエリを投げられない、ということらしいので、

$dbh->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true);

てな感じに書いてみましたが、やっぱり同じ結果でした。書き方間違ってるのかな…

結局、外部SQLファイルをセミコロンで分割して、一文ずつ投げるようにして解決しました。前は確かに動いてたんだけどな…MySQLの設定とかバージョンに関係あるのかも知れませんが、今日はここまで。