Mysql_query ve mysql_fetch_array kullanma

3 Cevap php

Benim veritabanından veri almak için uygun yolu olduğunu öğrenmek için çalışıyorum. Her iki şekilde çalışır, ama ne fark eder; derinlemesine bir açıklama?

$sql = mysql_query("SELECT * FROM _$setprofile");
while($row = mysql_fetch_array($sql)) {
    $username = $row['user'];
    $password = $row['pass'];
    echo "$username:$password";
}

versus Aşağıdaki fonksiyonu ...

$sql = mysql_query("SELECT user,pass FROM _$setprofile");
while($row = mysql_fetch_row($sql)) {
    echo "$row[0]:$row[1]";
}

Bu her zaman bilmek istedim bir şeydir.

3 Cevap

Fark ilk örnekte değişkenleri yeniden atıyorsanız olduğunu. Ama sadece söyleyebiliriz:

while(list($username, $password) = mysql_fetch_array($sql)) {
    echo "$username:$password";
}

Yoksa karma çekin olabilir

while($row = mysql_fetch_assoc($sql)) {
    echo "{$row['username']}:{$row['password']}";
}

Doğru yolu Ben özellikle onları ihtiyaç olmadıkça uygulama veya sizin tercihinize, ben şahsen sayısal dizinlenmiş dizileri önlemek bağlıdır. Kim hangi endeksinde hangi verilerin bir zihinsel sekme tutmak için denemek istiyor?

Farkı (yoksa bunu söylemek için ekstra bir seçenek sunmak sürece) fetch_row yalnızca sayısal indeksler alırken fetch_array, sayısal ve ilişkisel İKİ dizinler içeren bir dizi çıkartır ve fetch_assoc sadece ilişkisel dizinleri alır olmasıdır. Genellikle, hem istemiyorum.

Yerine fetch_array of fetch_assoc kullanın - SADECE size ilişkilendirilebilir indeksleri ile bir dizi alır. İşte bu (daha az iş yapmak zorundadır) biraz daha hızlı koşmak demektir, ama kod gibi açık olacaktır.

Fonksiyonel açıdan bakıldığında, fark az. Ancak, eski ihtiyacınız daha size veritabanından daha getiriliyor konum sorunu (SELECT *) sahiptir. Bu genellikle daha gerçekten ihtiyacınız daha seçmek için değil tavsiye.

Dahili olarak çok fark yok. Sıra konumlarına ve sütun isimleri hem de ne olursa olsun, MySQL istemci API içinde sonuç kümesi meta mevcuttur.

Kullanımı ile ilgili, hem de farklı durumlarda kullanışlı olabilir. Adıyla sütunları başvurulması daha anımsatıcı olan, (yarı) kendi kendini belgeleyen kod sonuçları, vb kodunuzu bozmadan sorguda pozisyon veya sütun sayısını değiştirmek için izin verir

Ama sıralı tarafından getiriliyor bazen de eldir. Örneğin:

SELECT u.name, d.name FROM user u JOIN department d USING (dept_id)

Şimdi sonuç setinde aynı ada sahip iki sütun var. Eğer bir ilişkisel dizi getirme varsa bir doç dizisi yalnızca anahtar başına bir değere sahip olabilir, çünkü, bir başka yazar. Yani $row["name"] isimlerinden biri olduğunu ve mutlaka olacak bilmiyorum.

SELECT d.name, COUNT(*) FROM user u JOIN department d USING (dept_id) GROUP BY dept_id

Artık hiçbir ad olan bir sütun var, ve kullanmak RDBMS markası bağlı olarak, otomatik bir komik görünümlü takma icat olabilir, ya da başka sadece Doç dizi için anahtar olarak tüm ifadeyi kullanın. Yani bu durumda sıralı konumunu yerine sütun adını kullanmak edebilmek güzel.

(Bu benim yazım tarzı ben yazıyorum ederken StackOverflow podcast dinliyorum zaman daha informal ve konuşkan olur ne komik.)