|
要望
>> 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などをすると、現状ではエラーになります。
対応よろしくお願いいたします。
|
|
|
バグ報告まことにありがとうございます。
最新バージョンにて該当部分を修正させて頂きました。
協力まことにありがとうございます。
|
|
shiyo |
2007-07-09 14:53:35 |
|
返信、大変遅れて申し訳ありません。
対応していただき、大変ありがとうございます。
大変助かりました。
新しいバージョンをダウンロードして、使用してみました。
新規登録ができなかったので、調査したところ、以下の点で引っかかっていたようでした。
●/db/pgsql.php
function insert( $table, $datas, $connect )
{
・・・
foreach( $datas as $key => $data )
{
$query .= $data; //←★ここ
・・・
-------------
$query .= "'" . $data . "'";
-------------
に修正したら、動くようになりました。
以上、よろしくお願い申し上げます。
|
|
|
なるほど、まだありましたか。
ご確認まことにありがとうございます。
次回に適用しておきます。
|
|