[s2container-php5:103] Re: findAllArrayメソッド実行時にS2Dao_PrimaryKeyNotFoundRuntimeException発生。(長文)

Yusuke Hata [E-MAIL ADDRESS DELETED]
2007年 8月 19日 (日) 22:30:19 JST


ハタです。
反応が遅くなってしまいました。すいません。

うえやまさん、詳細な解析ありがとうございます。
MySQL側でprimaryKeyを取得しにいくために

> SELECT * FROM テーブル名 LIMIT 0

として、空のテーブル情報から取得できたカラム項目数(PDOStatement::columnCount)分だけ
カラム定義情報を取得(PDOStatement::getColumnMeta)します。
MySQLの場合は、PDOドライバの実装だけでこの定義を使用しているのですが、
MySQLのバージョンによってはPDOドライバがサポートしていない場合もあります。(4.0.xxとか)
もしPDOドライバがサポートしていない場合は、他のDBMS同様、Wrapperで取得するように修正が必要です。
# ちなみに、以前私の環境でテストしたときに4.0.20が上手く認識しなかったような記憶があります。

もしよければ使用しているMySQLのバージョンを教えていただけますか?
私の方で用意ができれば、再現させてみたいです。

以上です、よろしくお願いします。

"Yoshinari Ueyama" <[E-MAIL ADDRESS DELETED]> wrote:

> うえやまです。
> 
> 下記件、追加情報です。
> 
> 
> > 最近、ひさしぶりにS2Daoでプログラムを作成しだしました。
> > で、あるテーブル用のDaoとEntityを作成してDaoのfindAllArrayを
> > 実行すると以下のエラーが発生しました。
> >
> > どうも、s2dao.core.classes.phpのcheckPrimaryKey()実行時にPKが
> > 定義されていないと判断されてエラーとなっているようです。
> > create table文を見る限りPK設定していますし・・・
> 
> 
> S2Dao_DatabaseMetaDataUtilクラスのaddPrimaryKeysメソッド中で
> 、getTableInfoメソッドを用いて取得している情報を調べてみましたら
> 以下の2件を取得していました。
> 
> native_type VAR_STRING
> flags Array
> table users
> name username
> len 60
> precision 0
> pdo_type 2
> 
> native_type VAR_STRING
> flags Array
> table users
> name email
> len 600
> precision 0
> pdo_type 2
> 
> ・・・flagsの中身を見ればさらに分かるでしょうが、この段階で存在しない
> 項目「username」を取得しています。ほんらいならばpk指定している「id」項
> 目についての情報が取得されるべきだと思います。このような状態になったの
> は何故か?という観点で調査継続です。
> 
> (参考)tableの定義
> CREATE TABLE `users` (
>   `id` int(10) unsigned NOT NULL auto_increment,
>   `name` varchar(50) default NULL,
>   `email` varchar(255) character set utf8 collate utf8_bin NOT NULL
> default '',
>   `pwd` varchar(255) default NULL,
>   `profile` text,
>   `created` datetime default NULL,
>   `modified` datetime default NULL,
>   PRIMARY KEY  (`id`),
>   UNIQUE KEY `email` (`email`)
> ) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=3 ;
> 
> 
> 以上です。
> -- 
> ------------------------------------------------------------------
>   植山 能成@福岡
> mailto:[E-MAIL ADDRESS DELETED]
> ------------------------------------------------------------------
> 


-- 
Yusuke Hata <[E-MAIL ADDRESS DELETED]>
blog: http://blog.xole.net/


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