SourceForge.jp

ちいたんフォーラム

要望 >> PostgreSQLでデータ取得のバグ?

shiyo 2007-07-06 10:18:01
PostgreSQLでデータを取得すると、データが取得できません
   ・システムエラーは表示なし
   ・データがあるにもかかわらず、データ表示なし。
   ・フレームワーク内のソースをデバッグしてみると、取得したレコードが 0 件でした。
------------------------------------------------------
$c->set( "datas", $c->user->find( "", "id DESC" ) );
------------------------------------------------------


ちなみに、以下のコードでは、データ数の取得は正しい件数を取得できます。
------------------------------------------------------
$c->set( "count", $c->user->getcount( "", "" ) );
------------------------------------------------------

■■■補足■■■

●環境
PHP Version 4.3.11 or PHP Version 5.2.2 (2環境で試しました)
PostgreSQL 8.2.4 on i686-pc-mingw32, compiled by GCC gcc.exe (GCC) 3.4.4 (mingw special)

●プログラムはそのままで、接続文字列をMySQLに設定にしているときは、エラーは発生しません。
 PostgreSQLに接続先を変更するとエラーになります。

●サンプルで、blogサンプルをUPしてくださっていますが、、こちらの方は、データ取得はできますが、以下のエラーが発生します。
------------------------------------------------------
Warning: pg_fetch_array(): Unable to jump to row 1 on PostgreSQL result index 20 in
・・・/cheetan/blog/cheetan/db/pgsql.php on line 29
------------------------------------------------------
良く見てみると、「ちいたん最新バージョン」と「blogサンプル」では、pgsql.phpのfindメソッドのコードが違うようです。


お手数ですが、確認をお願いいたします。



返信  パスワード      


shiyo 2007-07-06 17:19:58
自己レスです。

db/pgsql.php を、以下のように修正したら、動きました。

function find( $query, $connect )
{
$ret = array();
if( $res = $this->query( $query, $connect ) )
{
$rownum = pg_num_rows( $res );
//for( $i = 0; $i < $numrow; $i++ )
for( $i = 0; $i < $rownum; $i++ ) //★
{
$row = pg_fetch_array( $res, $i, PGSQL_ASSOC );
array_push( $ret, $row );
//$rownum++; //★
}
pg_free_result( $res );
}

return $ret;
}

それから、以下にもバグがあったので、修正お願いします。

db/common.php
MySQLは、フィールド名を「'」で囲みますが、PostgeSQLでは、フィールド名を囲まないので、Updteやinsertなどをすると、現状ではエラーになります。
対応よろしくお願いいたします。
パスワード      

開発者 2007-07-06 18:35:21
バグ報告まことにありがとうございます。
最新バージョンにて該当部分を修正させて頂きました。
協力まことにありがとうございます。
パスワード      

shiyo 2007-07-09 14:53:35
返信、大変遅れて申し訳ありません。
対応していただき、大変ありがとうございます。
大変助かりました。

新しいバージョンをダウンロードして、使用してみました。
新規登録ができなかったので、調査したところ、以下の点で引っかかっていたようでした。

●/db/pgsql.php

function insert( $table, $datas, $connect )
{
        ・・・
foreach( $datas as $key => $data )
{
$query .= $data; //←★ここ
        ・・・

-------------
$query .= "'" . $data . "'";
-------------

に修正したら、動くようになりました。

以上、よろしくお願い申し上げます。
パスワード      

開発者 2007-07-10 01:51:51
なるほど、まだありましたか。
ご確認まことにありがとうございます。
次回に適用しておきます。
パスワード