[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