2016-09-01 16 views
6

fetch_assocがどのように動作するのか、how/whyを理解しようとしています。 私は次のコードを持っている:fetch_assoc()の理解

$results = $connectToDb->fetch("SELECT * FROM customer"); 
$resultsArray = $results->fetch_assoc(); 
print_r($resultsArray); //print_r 1 

while($row = $results->fetch_assoc()){ 
    print_r($row);  //print_r 2 
} 

クエリは、テーブルから3つの行を返します。 第1のprint_rは照会されたデータの第1行のみを返しますが、第2のprint_rはすべて3を返します。どのようにしてfetch_assocをwhileループに置くと、何度もアクションを実行するように指示されますか? fetch_assocは連想配列かNULLのどちらかを返しますが、whileループがfetch_assocに次の行をフェッチする方法を理解するのは難しいですね。

ありがとうございます。

+5

なぜループに何かを置くと何度か何かが起こるのですか? – Phylogenesis

+1

while文の意味は簡単です。 while式がTRUEと評価される限り、PHPはネストされたステートメントを繰り返し実行するように指示します。式の値は、ループの開始時に毎回チェックされるため、ネストされた文の実行中にこの値が変更されても、繰り返しは終了しません(PHPが文を実行するたびに1回の繰り返しです)。時には、while式が最初からFALSEと評価された場合、ネストされたステートメントは一度も実行されません。 – Daan

+0

http://php.net/manual/en/control-structures.while.php – RiggsFolly

答えて

10

はあなたのコードを理解しようとしますし、それがどのように働くか:

$results = $connectToDb->fetch("SELECT * FROM customer"); 

変数$resultsは、クエリによって返される行のコレクションを持っています。コレクションのサイズは0からnまでです。

$resultsArray = $results->fetch_assoc(); 

この行は、コレクションから最初の要素をフェッチします。コレクションが空の場合は、NULLが返されます。それは以下のステップで切り離すことができる

while($row = $results->fetch_assoc()){ 
} 

  1. 計算$row = $results->fetch_assoc()および要素又はNULL配列を返します。
  2. $row = $results->fetch_assoc()whileに変更し、値をwhile(array(with elements))またはwhile(NULL)としてください。
  3. while(array(with elements))の場合、while条件をTrueに解決し、繰り返しを実行できるようにします。
  4. while(NULL)の場合、while条件をFalseに解決し、ループを終了します。