Nasıl Mysql Query bir dizi dönüş döngü için

4 Cevap php

Bu çocuklar için kolay olabilir ama olsun could't.

I have a php class that query the database and return the query result. I assign the result to an array and wants to use it on my main.php script. I have tried to use echo $var[0] or echo $var[1] but the output are 'array' instead of my value. Anyone can help me about this issue? Thanks a lot!

Benim php sınıfı

<?php 
class teamQuery {

            function teamQuery(){


            }
            function getAllTeam(){
                $connection = mysql_connect(DB_SERVER,DB_USER,DB_PASS);
                    if (!$connection) {
                        die("Database connection failed: " . mysql_error());
                    }

                    $db_select = mysql_select_db(DB_NAME,$connection);
                    if (!$db_select) {
                        die("Database selection failed: " . mysql_error());
                    }

                  $teamQuery=mysql_query("SELECT * FROM team", $connection);

                    if (!$teamQuery){
                        die("database has errors: ".mysql_error());
                          }
                    $ret = array();   

                    while($row=mysql_fetch_array($teamQuery)){

                    $ret[]=$row;
                    }     
                    mysql_free_result($teamQuery); 

                    return $ret;
                    }


            }


?>

Main.php My php

$getTeam=new teamQuery();
$team=$getTeam->getAllTeam();

   //echo $team[0] or team[1] output 'array' string!
  // while($team){
  // do something }  can't work either

  // How to loop through the values??

Teşekkürler!

4 Cevap

You get this output because $team[0] and $team[1] are indeed arrays. They are the rows of your database table and every row consists of several fields, e.g. id, name etc.
You have 2 dimensional array, that might look like this:

Array
(
    [0] => Array
        (
            [id] => 1
            [name] => foo
        )

    [1] => Array
        (
            [id] => 2
            [name] => bar
        )
)

Veri üzerinden döngü kullanın for or foreach :

foreach($team as $member) {
    foreach($member as $k=>$v) {
        echo $k . ': ' . $v;
    }
}

Ayrıca documentation about arrays sizin için okumaya değer olabilir.

İlk tavsiye: dizilerini görüntülemek için print_r işlevini kullanın. Bu veri bir değişken içinde depolanan nasıl görmek için çok kullanışlı. HTML etiketinin <pre> sarın böylece tek bir satırda hepsi bu değil. Örnek:

echo '<pre>'; print_r($variable); echo '</pre>';

İkincisi: muhtemelen böyle çıkış kaydetmek istemiyorum. print_r ile $ret değişkeni görüntülemek ve veri depolanan nasıl bakın. Daha da yararlı kullanmaktır mysql_fetch_assoc. Bu deneyin:

while ($row = mysql_fetch_assoc($teamQuery)) {
  echo '<pre>'; print_r($row); echo '</pre>'
}

Her satırında artık key içerdiğini görmek ve bir value, örneğin olabilir "Isim" ve "John Doe", "yaş" ve "35", vb bu gibi belirli bir değer görüntülemek Bu şekilde:

echo $row['name']; // John Doe

Eğer veritabanından birden fazla ürün almak ve onları bir diziye saklamak istediğinizde, bu girişler her biri için benzersiz bir tanımlayıcı gerekir. Genellikle bu verilerin depolandığı tablodan benzersiz bir kimlik numarasıdır. Eğer grup böylece gibi birlikte bütün bu anahtarları ve değerleri, can bu şekilde:

while ($row = mysql_fetch_assoc($teamQuery)) {
  $results[$row['id']]['name'] = $row['name'];
  // etc
}

Eğer alınan her alan için elle yapabilirsiniz. Eğer tüm alanları gerekiyorsa (seçerken genellikle ne *), bu daha kolaydır:

while ($row = mysql_fetch_assoc($teamQuery)) {
  foreach ($row as $key => $value) {
    $results[$row['id']][$key] = $value;
  }
}

$results dizisi şimdi böyle bir şey içerir:

Array
(
    [1] => Array
        (
            [id] => 1
            [name] => John Doe
        )

    [2] => Array
      (
          [id] => 2
          [name] => Jane Doe
      )
)

... Ve tüm diğer değerler. Şimdi bu girişlerden her görüntülemek için tekrar önce bahsedilen foreach işlevini kullanabilirsiniz. Sen $key ve $value kullanmak zorunda değilsiniz; daha anlamlı bir şey seçmek için çoğunlukla kolay. Örn: yerine $results (ya da sizin $ret) size alınıyor konum ne çünkü, $team veya $members kullanın. Sonra bu gibi bu üyelerin her görüntüler:

foreach ($team as $memberId => $member) {
  echo $member['name']; // John Doe, Jane Doe, etc.
}

Bu deneyin (ve bunun varyasyonları):

foreach ($team as $member) {
    echo $member[0];
    echo $member[1];
    //etc.
}

Sizin dizideki elemanların her biri de bir dizi olmasıdır. print_r dizisi kendi gözleriyle görmek için.

Eğer çıkış her takım için isimleri istiyorsanız Örneğin, siz dış dizi üzerinden ilk döngü var ve döngü içinde tek alanları erişim edeceğiz.

foreach ($team as $t) {
    echo $t["name"] . "<br />"; // hopefully it's "name", the * in your query isn't really self-documenting
}