スレッド表示 | フラット表示〕 全トピック 920 件中 661 番目 次≫ ≪前

オブジェクトの配列を返す関数

created: 2004-03-13 13:05 | modified: 2004-03-14 22:59 | reply: 3

[1401] オブジェクトの配列を返す関数

user: fangs | created: 2004-03-13 13:05
はじめて質問させていただきます。
PHP+MYSQLでデータベースアプリを作ろうとしているのですが、困っています。
<?
class database {
var $con;

function database() {
$this->con = mysql_connect(...);
mysql_select_db($this->con, DB_NAME);
}

function getAll() {
$sql = "SELECT * FROM TBL_NAME";
$result = mysql_query($sql, $this->con);
while ($row = mysql_fetch_object($result)) {
$ret[] = $row;
}
return $row;
}
}

$db = new database();
$names = array();
$names = $db->getAll();
for ($i = 0; $i < sizeof($names); $i++) {
$rec = $names[$i];
print("[$i] $rec->id : $rec->name<BR>\n");
}

?>
テーブルの型は、
id int(8)
name varchar(32)

で、上記の出力結果は
[0]
[1]
[2]
:
:
と、内容がまったく表示されません。
・レコードは確かにあります。(mysqlコマンドで確認)
・クエリー、および fetch_objectは正しくできている。(getAll()内でprint文を使って確認)
・getAll()内で下にあるような for文を実行したところ、正しく表示された。

どうも、getAll()でオブジェクトの配列を返しているのですが、呼び出した側で配列の中身
がどんな型なのかわかってないように見えます。
このような場合どうすれば呼び出し側でうまくオブジェクトの型を認識させられるのでしょうか?
どなたかアドバイスいただける方、よろしくおねがいします。

(FreeBSD 4.9 + apache 1.3.26 + php 4.3.1 + mysql 3.23.56)
reply: 1402 1403 1406 返信 編集 削除

[1402] 配列の初期化

user: ゆうじ | created: 2004-03-13 18:56
こんにちは。

function getAll() より抜粋
while ($row = mysql_fetch_object($result)) {
$ret[] = $row;
}

このループ処理の前に、
$ret = array();
を挿入しておくと、
正しく型を判別しくれそうな気がします。
ちがったかな。
Parent: 1401  返信 編集 削除

[1403] RE:

user: 山田 | created: 2004-03-13 23:30
上記のソースはコピペでしょうか?

function getAll() {

return $row;
ではなく
return $ret;

です.
Parent: 1401  返信 編集 削除

[1406] Re: オブジェクトの配列を返す関数

user: fangs | created: 2004-03-14 22:59
山田さま、ご指摘のとおりです。

ゆうじさま、それも試してみましたが、結果は同じでした。
その他呼び出し側で配列を用意して、引数で渡すなどしても、やっぱりダメでした。

ちょっと指向を変えて別の方法で実現してみることにします。
ありがとうございました。
Parent: 1401  返信 編集 削除
スレッド表示 | フラット表示〕 全トピック 920 件中 661 番目 次≫ ≪前
ページの一番上へ
Googleグックマークに登録 Yahooグックマークに登録 livedoorクリップに登録 @niftyクリップに登録 はてなブックマークに登録 deliciousに登録 Buzzurlに登録 FC2ブックマークに登録
最近更新された掲示板トピックス
管理人Blog
Yahoo Search

最近更新したNote
PHPマニュアル
今日のブックマーク
PHPマニュアル関数検索
関数名を入力し検索ボタンをクリック↑