Çünkü mysql_fetch_array tüm satırları vermez. her çalışmasında tek satır sonuç döndürür.

GundogduYakici adlı üyeden alıntı: mesajı görüntüle
İyi forumlar,

Pure PHP 'de genelde kodları incelediğim zaman veritabanından verileri çekerken sürekli while döngüsü kullanıyorlar. Neden foreach değil ?

while($row = mysql_fetch_array result($sql)) {
     $data[] = $row['name'];
}
Neden bu şekilde farkı ne yani tam anlamı ile açıklayabilecek olan var mı ?

foreach($row as $name){
     $data[] = $name->firstName;
}
Böyle kullanılamıyor mu ?
ikinci kullanımda $row değişkenine mysql_fetch_array den dönen veriyi ataman lazım.
ama mysql fetch array her çalıştığında tek satır döndürür.
yani

$row = mysql_fetch_array result($sql);
foreach($row as $name){
     $data[] = $name->firstName;
}
Yaptığında sorgu sonucu 10 satır da olsa tek satır sonuç döner.
Foreach in inputu array olmak zorundadır.
While ise bir bir fonksiyon, ya da true false döndürebilen bir ifadeyi input olarak alabildiği için fonksiyonu while içinde değişkene atıyoruz.
mysql_fetch_array son satırı verene kadar true döndürür ve satırlar değişkene atanır. false verdiğinde işlem biter.

foreach için herhangi bir true false koşulu yoktur, input array olmak zorundadır ve dizinin tüm elemanlarını bitirene kadar sıralı işlem yapar.
foreach ile yapabilmen için mysql_fecth_array değil mysql_fetch_all kullanman lazım. yoksa mysql_fetch_Array tek satır döndürür, foreach tek elemanlı arrayi çalıştırır ve işlem biter.
böylece mysql den dönen sorgu sonucunu toptan bir array halinde foreach içine atabilirsin.

foreach (mysql_fetch_all($result) as $row){
     $data[] = $row['name'];
}
Ama bu şekilde tüm sonuçları bir arada döndüreceğin için bellek kullanımın artacaktır.
while daha okunabilir, daha az kaynak tüketir.