2012-04-27 9 views
2

私はこれをテスト目的として試しました。そして私はなぜこれが起こっているのか分からない。それは私の専門家からの助けが必要です。ありがとう。単一のmysql_query()から取得されたデータに対して2つの異なるmysql関数が異なる行を返すのはなぜですか?

データベースがあり、データベースとの接続が確立しているとします。 tableという名前のテーブルがあるとします。テーブルの中には、IDと名前の2つの列があります。テーブルには5行のデータがあります。テーブルの構造は

| id | name | 
--------------- 
| 1 | name1 | 
| 2 | name2 | 
| 3 | name3 | 
| 4 | name4 | 
| 5 | name5 | 

今、私のコードはhere-

<?php 
    mysql_connect("localhost","root","") or die(mysql_error()); 
    mysql_select_db("test") or die(mysql_error()); 

    $result = mysql_query("SELECT * FROM `table`"); 

    /* let's store this value in two different variables. */ 

    $result1 = $result; 
    $result2 = $result; 

    /* let's perform mysql_fetch_array() and mysql_fetch_row() functions */ 
    $result22 = mysql_fetch_row($result); 
    var_dump($result22); 
    $result11 = mysql_fetch_array($result); 
    var_dump($result11); 
?> 

を移行することは、結果:

array 
    0 => string '1' (length=1) 
    1 => string 'name1' (length=5) 

array 
    0 => string '2' (length=1) 
    'id' => string '2' (length=1) 
    1 => string 'name2' (length=5) 
    'name' => string 'name2' (length=5) 

私は関数の順序を変更した場合、それが結果:

array 
    0 => string '1' (length=1) 
    'id' => string '1' (length=1) 
    1 => string 'name1' (length=5) 
    'name' => string 'name1' (length=5) 

array 
    0 => string '2' (length=1) 
    1 => string 'name2' (length=5) 

私はfunctioを実行するとnはmysql_queryの結果に、関数が呼び出される前に他の変数に格納されていても、結果から最初の行を削除します。

私はid = 1の条件を追加する場合は、第二の機能は次のように、falseを返します。

array 
    0 => string '1' (length=1) 
    'id' => string '1' (length=1) 
    1 => string 'name1' (length=5) 
    'name' => string 'name1' (length=5) 

boolean false 

なぜこの出来事はありますか?前もって感謝します。この行は、「結果」を返さない

答えて

2

、それはあなたが結果にアクセスするために使用することができますresourceオブジェクトを返します。

$result = mysql_query("SELECT * FROM `table`"); 

これらの行は、ちょうど2つの異なる変数に同じリソースを割り当てます

$result1 = $result; 
$result2 = $result; 

2つの別々の結果セットとして考えるべきではありません。あなたは同じリソースに対して2つの異なる名前を与えたばかりです。

+0

これは、オブジェクト(リソースを含む)の割り当てがPHPで参照されることに由来します。だから、彼らは同じものへの参照であり、互いのコピーではありません。 – Hammerite

+0

同じリソースを指している2つの異なる変数として、Cのポインタのようなものですか? mysql_query()が何度も何度も何度も呼び出さずに返された別の関数を呼び出すことによって、同じリソースにアクセスする方法はありますか? – maksbd19

+0

@ maksbd19:はい、いくつかの点でCのポインタに似ています。おそらく、PHPでの参照の割り当ては、カバーの下のポインタを使って実装されます。 –

関連する問題