[PHP-users 7279] PRARのバグ?

Koji Koshiba php-users@php.gr.jp
Fri, 3 May 2002 18:28:37 +0900


PEAR のfetchRow()を使っておかしな現象にでくわしました。
以下の2つのソースは同じ処理をやっているのですが、結果が違います。

<?php  // PEARを使ったとき
    include 'db.php';
    $db = DB::connect('mysql://localhost/bmi');
    $db->setFetchMode(DB_FETCHMODE_OBJECT);
    $sql = "select date from dairy where id=1";
    $result = $db->query($sql) or die("SQLエラー:".$sql);
    $cnt = $result->numRows();
print("cnt:".$cnt."個<br>");
    for ( $i=0; $i < $cnt; $i++ ) {
      $ans = $result->fetchRow($i);
      $date[$i] = $ans["date"];
print("[$i][".$ans["date"]."<br>");
    }
    $db->freeResult($result);
    $db->disconnect();
?>
<?php  // PEARを使わないとき
    mysql_connect('localhost');
    mysql_select_db('bmi');
    $sql = "select date from dairy where id=1";
    $result = mysql_query($sql) or die("SQLエラー:".$sql);
    $cnt = mysql_num_rows($result);
print("cnt:".$cnt."個<br>");
    for ( $i=0; $i < $cnt; $i++ ) {
      $ans = mysql_fetch_object($result);
      $date[$i] = $ans->date;
print("[$i][".$ans->date."]<br>");
    }
    mysql_free_result($result);
    mysql_close();
?>


PEARを使わずに直接mysqlの関数を使うと次のように正常に表示されますが、
cnt:13個
[0][2001-11-18]
[1][2001-11-19]
[2][2001-11-20]
[3][2001-11-26]
[4][2001-11-28]
[5][2001-12-08]
[6][2001-12-19]
[7][2001-12-24]
[8][2002-01-13]
[9][2002-01-26]
[10][2002-02-02]
[11][2002-02-06]
[12][2002-02-25

PEARを使うと次のように歯抜けの状態になります。
cnt:13個
[0][]
[1][]
[2][2001-11-20]
[3][]
[4][]]
[5][]]
[6][2001-12-19]
[7][2001-12-24]
[8][]
[9][]
[10][2002-02-02]
[11][2002-02-06]
[12][]

PEARを使うのは初めてなので、PEARのバグなのか、使い方が間違って
いるのかがわかりません。
環境はWindows2000Pro上のスタンドアロンで
Apache 1.3.23
Mysql 3.23.29
PHP 4.2.0 です。
PEARはPHP4.2.0に付属のものです。

何が原因か、おわかりの方がいらっしゃいましたら、お知恵を頂けないでしょうか?
よろしくお願いします。

小柴 kossy@mtg.biglobe.ne.jp