[seasar-php:140] Re: S2PagerのuseLimitOffsetQuery=trueについて

ISHITOYA Kentaro [E-MAIL ADDRESS DELETED]
2007年 5月 21日 (月) 21:12:46 JST


yonekawaさん

早速の返信ありがとうございます。
石戸谷です。

今ソースコードを書き換えて、useLimitOffsetQueryをtrueにして確認したとこ
ろ、間違いなく表示が行われました!

対応、ありがとうございます。
失礼いたします。

yonekawa wrote:
> yonekawaです。
> ご報告ありがとうございます。
> 
> 現象を確認中ですが、見る限りでは先日見つけたバグのせいだと思われます。
> S2Dao_PostgreSQL.class.phpの79行目にgetLimitOffset()というメソッドが
> あると思いますが、
> getLimitOffsetSql()が正しいです(S2Dao_MySQLクラスはそうなっているはずです)
> そういった非常に恥ずかしいバグですorz
> 
> 現象としては、PostgreSQLはLimit句を使えるものとして処理するにも関わらず、
> 肝心のLimit句を取得するメソッドの名前が間違っていて取得できずに、
> パラメータだけbindしようとするせいで、パラメータの数が合わないと
> 怒られているのだと思われます。
> 
> 恐らくメソッドの名前をgetLimitOffsetSqlに直すだけで修正されると思います。
> お手数ですがご確認いただけますでしょうか?
> 
> この修正はS2Dao.PHP5-1.1.3のリリースに含めるつもりなので以降は大丈夫なはずです。
> よろしくお願いします。
> 
> On 5/21/07, ISHITOYA Kentaro <[E-MAIL ADDRESS DELETED]> wrote:
>> 石戸谷です。
>>
>> メールの連投申し訳ありません。
>> S2Pagerについて報告です。
>>
>> PostgreSQL8.2、PHP5.2.2を使っているのですが、
>> <property name="useLimitOffsetQuery">true</property>
>> を指定すると、下記エラーが出ます。
>>
>> exception 'S2Dao_SQLRuntimeException' with message 'SQLException
>> occured, because SQLSTATE[HY093]: Invalid parameter number: number of
>> bound variables does not match number of tokens' in
>> C:\cygwin\home\kentaro\www\cmmesse\lib\s2dao.php5\build\s2dao.php5\s2dao.core.classes.php:538
>>
>>
>> 実行時の518行目、$this->bindArgsの引数、Statement, $args1, $args2は下記
>> です。また最後は、DEBUGログです。
>> useLimitOffsetQueryをfalseにすると正常に答えが返ってきます。
>> 以上よろしくおねがいいたします。
>>
>> object(PDOStatement)#3138 (1) {
>>   ["queryString"]=>
>>   string(1055) "SELECT addresses.id, addresses.contact_id,
>> addresses.address_type_id, addresses.prefecture_id,
>> addresses.priority_id, addresses.country_id, addresses.postal,
>> addresses.city, addresses.street, addresses.lot,
>> addresses.city_readings, addresses.street_readings,
>> addresses.lot_readings, addresses.geocode, contactId.id AS id_0,
>> addressTypeId.id AS id_1, addressTypeId.name AS name_1, prefectureId.id
>> AS id_2, prefectureId.district_id AS district_id_2, prefectureId.name AS
>> name_2, priorityId.id AS id_3, priorityId.name AS name_3, countryId.id
>> AS id_4, countryId.name AS name_4, countryId.legalname AS legalname_4
>> FROM addresses LEFT OUTER JOIN contacts contactId ON
>> addresses.contact_id = contactId.id LEFT OUTER JOIN address_types
>> addressTypeId ON addresses.address_type_id = addressTypeId.id LEFT OUTER
>> JOIN prefectures prefectureId ON addresses.prefecture_id =
>> prefectureId.id LEFT OUTER JOIN priorities priorityId ON
>> addresses.priority_id = priorityId.id LEFT OUTER JOIN countries
>> countryId ON addresses.country_id = countryId.id WHERE  contactId.id = ? "
>> }
>> array(3) {
>>   [0]=>
>>   int(0)
>>   [1]=>
>>   int(0)
>>   [2]=>
>>   int(-1)
>> }
>> array(3) {
>>   [0]=>
>>   string(4) "NULL"
>>   [1]=>
>>   string(7) "integer"
>>   [2]=>
>>   string(7) "integer"
>> }
>> [DEBUG]  - SELECT addresses.id, addresses.contact_id,
>> addresses.address_type_id, addresses.prefecture_id,
>> addresses.priority_id, addresses.country_id, addresses.postal,
>> addresses.city, addresses.street, addresses.lot,
>> addresses.city_readings, addresses.street_readings,
>> addresses.lot_readings, addresses.geocode, contactId.id AS id_0,
>> addressTypeId.id AS id_1, addressTypeId.name AS name_1, prefectureId.id
>> AS id_2, prefectureId.district_id AS district_id_2, prefectureId.name AS
>> name_2, priorityId.id AS id_3, priorityId.name AS name_3, countryId.id
>> AS id_4, countryId.name AS name_4, countryId.legalname AS legalname_4
>> FROM addresses LEFT OUTER JOIN contacts contactId ON
>> addresses.contact_id = contactId.id LEFT OUTER JOIN address_types
>> addressTypeId ON addresses.address_type_id = addressTypeId.id LEFT OUTER
>> JOIN prefectures prefectureId ON addresses.prefecture_id =
>> prefectureId.id LEFT OUTER JOIN priorities priorityId ON
>> addresses.priority_id = priorityId.id LEFT OUTER JOIN countries
>> countryId ON addresses.country_id = countryId.id WHERE  contactId.id = 0
>> _______________________________________________
>> seasar-php mailing list
>> [E-MAIL ADDRESS DELETED]
>> https://ml.seasar.org/mailman/listinfo/seasar-php
>>
> 
> 



seasar-php メーリングリストの案内