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

Yusuke Hata nowel @ xole.net
2006年 7月 3日 (月) 23:19:33 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
> 

<skip>

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

SuSE10.1 にて確認致しました。たしかに上記のようにエラーがでました。
指摘どおり上記のファイルを修正しました。
ありがとうございました。
# 手元にwindows機が無いのですが、Win32のPDOはあまり良い動きをしてくれなかったのを記憶しています。
# 機会があればWindows版でも試してみます。

今回の修正は、S2Dao.PHP5-1.1.0 リリース版には含まれると思いますが、お急ぎでしたらtrunkから
落としてみてください。

あと、どうやら上記のモノはoutfileがある場合は全ての結果セットでcolumnCountが無くなるようです。
例えば以下のようなSQLでもcolumnCountが存在しないみたいです。

select * into outfile '/tmp/hoge.txt' from EMP2
select null, EMP2.* into outfile '/tmp/foo.txt' from EMP2
select 'hoge' as Hoge, EMP2.* into outfile '/tmp/bar.txt' from EMP2

謎めいてますね...^^;

-- 
Yusuke Hata <nowel @ xole.net>
blog: http://blog.xole.net/


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