2012-02-20 8 views
3

私のメソッドがテーブルの最初の行だけを返すのはなぜですか?私はなぜそれが理解できず、それは私をナットに追いやっている。私はそれがとてもシンプルなものだと確信しています。PHP/MySQL:クエリが最初の行だけを返すのはなぜですか?

public function getTitlesForRegistrationForm() { 
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles"); 
    $i=0; 
    $array[0] = "No result"; 
    foreach($result->fetch(PDO::FETCH_ASSOC) as $row){ 
     $array[$i] = $row; 
     $i++; 
    } 
    return $array; 
} 

ありがとうございます。

+6

'$ result-> fetch()'は呼び出しごとに1つの行を返します。あなたはそれを一度呼び出すだけです... – knittl

+1

PDOライブラリを使用していますか?私はfetch()の代わりにfetchAll()を使うべきだと思う。 – Abhay

+1

phpMyAdminのようなツールを使ってクエリを実行して、結果を確認したことがありますか?あなたのクエリは単一の結果を持つ可能性があります。 –

答えて

3

fetch()内側にはwhileループが必要です。呼び出されるたびに1行だけを返します。

また、$iカウンターをリファクタリングする自由も取っています。その代わりにNo resultが最初の位置に配列に追加されます(使用する予定がある目的のため)。その後の行には[]が追加されます。

public function getTitlesForRegistrationForm() { 
    $array = array(); 
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles"); 

    // Why are you putting No Result onto the array? 
    // I've left it in, but it doesn't make sense to me. 
    $array[] = "No result"; 
    while ($row = $result->fetch(PDO::FETCH_ASSOC)){ 
     $array[] = $row; 
    } 
    return $array; 
} 
+0

あなたの質問への回答:http://stackoverflow.com/questions/9361894/php-mysql-how-to-get-multiple-values-from-a-php-database-method/9361921#comment11821387_9361921 –

+0

@DjangoReinhardt私は理解しましたなぜあなたは結果セットを配列に累積しているのですか、最初に「結果なし」を追加する理由はわかりません。 –

+0

ああ、そうです。エラーハンドリング、私は何かが動作していないことがわかります。おそらく最善の方法ではないでしょう。あなたの答えは実際には最高です(そして最初に)ので、それの必要はありません。ありがとう! –

7

それはあなたの$result->fetch()呼び出しが反復可能な値を返さないためであるが、結果の行またはFALSEのいずれかです。 PHPのforeachは反復可能な値でのみ動作します。このような何かにあなたのコードを更新すると、トリックを行う必要があります。

public function getTitlesForRegistrationForm() { 
    $result = $this->_db->query("SELECT UserTitleID, UserTitleName FROM UserTitles"); 
    $i=0; 
    $array[0] = "No result"; 
    while (($row = $result->fetch(PDO::FETCH_ASSOC)) !== FALSE) { 
     $array[$i] = $row; 
     $i++; 
    } 
    return $array; 
} 
2

試してみてください。代わりのforeachの中

while($row = $result->fetch(PDO::FETCH_ASSOC)){ 
    foo(); 
} 
2

してみてください。 Foreachは、返される単一の行に対してのみ反復処理を行います。 コード:

while($row = fetch(PDO::FETCH_ASSOC)) { 
    $array[$i] = $row; 
    $i++; 
} 
2

ちょうどあなたがfetch()を使用しているためですfetchAll

+0

あなたはそうです、それはうまくいきました。私は配列の中にいくつかの駄目を持っています。 –

3

fetch方法を置き換えます。 fetchall()が必要です。

http://www.php.net/manual/en/pdostatement.fetchall.php

[編集]うわー。私はより速く入力することを学ぶ必要があります。

+0

あなたはそうです、それはうまくいきました。私は配列の中にいくつかの駄目を持っています。 –

関連する問題