[s2container-php5:37] S2Daoでのselect ... insert intoの実行に関して

Eishi Kuroda kuroda @ jetsetrecords.net
2006年 6月 30日 (金) 18:47:00 JST


こんにちは、黒田です。

下記環境で、S2Daoを使ってテーブル内のデータの
ファイル出力を行おうと考えています。

s2container.php5-1.1.0
s2dao.php5-1.1.0-rc3
MySQL 4.1.20
PHP 5.1.4

Daoに下記の様に記述して、outputAll()を実行します。

    const outputAll_SQL = "select * into outfile 'path_to_output/out.txt'
    fields terminated by '\t' from some_table";
    public function outputAll();

ここで、環境によって結果が異なることになりました。
windows2000で実行してみたところ、問題なくファイル出力されます。
FreeBSD4.7で実行したところ、下記のようにエラーとなりました。

exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 2053 ' in
/usr/local/lib/php/S2Dao/S2Dao/S2Dao_BeanMetaDataResultSetHandler.class.php:14

S2Dao_BeanMetaDataResultSetHandler#handleで
    $resultSet->fetch(PDO::FETCH_ASSOC)
としているところでエラーとなっています。
select文なのですが、into outfileでファイル出力なので結果セットが存在せず、
fetchするとエラーとなるようなのです。
(なぜwindowsでは成功するのか疑問。)

これを回避する方法はないでしょうか?

とりあえずは、
S2Dao_BasicSelectHandler#executeで、
    $stmt->columnCount() == 1
以外の場合すべて
    return $this->resultSetHandler_->handle($stmt);
としていますが、エラー時点でのcolumnCount()は0となっていますので、
S2Dao_BeanMetaDataResultSetHandler#handleの頭に
        if($resultSet->columnCount() <= 0){
            return null;
        }
と付け加えると動いてはいるのですが・・・。

よろしくお願いいたします。

黒田映史



S2Container-PHP5 メーリングリストの案内