Ne benim select sorgusu ile yanlış?

6 Cevap php

Bir tablodaki tüm kayıtları getirmesi için bu kodu yazdım; Ancak nedense çalışmıyor:

function GetAllData(){
    $result = mysql_query("SELECT * FROM a2h_member_type");

    while($row = mysql_fetch_array($result))
    {
        echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];       
    }
}

Bu süre döngü içine almak değil, henüz tabloda 2 kayıt var. Herhangi bir fikir?

6 Cevap

While döngüsü çalışan olamazdık iki nedeni vardır olurdu:

  1. The query is failing. Given the simplicity of the query, this could only happen if:
    • tablo yok
    • veritabanına bağlantı yok
  2. Tabloda herhangi bir satır vardır.

Bu üç şeyi kontrol edebilir miyim? mysql_error() yazdırarak bir hata olup olmadığını kontrol edebilirsiniz, ve kullanarak döndürülen satır sayısını mysql_get_num_rows($result) kontrol edebilirsiniz

Giriş ne mysql_errno() ve mysql_error() return.

Başı olarak PHP documentation:

MySQL veri tabanı geri gelen hatalar artık uyarı verecek.

Bu (yine de iyi bir uygulama olduğu) elle hataları denetlemek zorunda kalıyoruz.

Ben sadece öneri (! Ben karakter için daha resmi bir isim var eminim), tek-back-tırnak içinde tablo adı içine etmektir:

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

- Masa adına herhangi bir garip karakterler yok çünkü ama ben bu kadar fark yaratacağını sanmıyorum. Muhtemelen değer olsa deneyin.

Bir fonksiyonun içinde bu kapsüllü var. Ne zaman ve nerede fonksiyonu komut denir bağlı olarak, henüz veritabanı bağlantısı açmış olabilir veya veritabanı seçtiniz. Eğer bu işlevi aramadan önce hem de yapmak gerekir. Fonksiyonu kod denir nerede aramaya gidin ve onu aramadan önce bu iki şeyi çağrı emin olun:

$con = mysql_connect([the databases URL], [your database username], [your database password]);
if(!$con) {
        die("Could not connect: " .mysql_error());
}
mysql_select_db([the name of your database], $con);

Muhtemelen yapılacak en iyi şey, bir şekilde (bu örnekte $ con) bağlantı değişkeni kaydetmek ve if (! $ Con) kodunu kullanarak fonksiyonun başında onu kontrol etmek olurdu.

Ben bu yöntemi çağırmadan önce bağlı olduğunuz varsayalım yüzden mysql_connect () veya mysql_select_db () komutu görmüyorum. Onlar harf duyarlı beri ben de, alan adları için tam yazım kullandım varsayalım! Yani, mantık, hiçbir satır döndürür mysql_fetch_array ($ result) dikte olacaktır.

Yöntem, açıkça bir veritabanı açık değil ve mysql_query () belirli bir veritabanı kaynağını belirtmek olmadığından, sorgu mysql_connect () ile açtım son veritabanına bakıyor olurdu. Size bağlı veya farklı bir veritabanına geçiş asla varsa o veritabanını bulamıyorum. mysql_query ()) (böylece mysql_fetch_array, YANLIŞ iade edilebilir de FALSE döndürür.

Önce bazı hata ayıklama bilgi eklemek için deneyin:

error_reporting(E_ALL);
ini_set("display_errors", true);
..........
function GetAllData(){
    $result = mysql_query("SELECT * FROM a2h_member_type") or die(mysql_error());

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

        echo $row['member_type_id'] . " " . $row['member_type_name'] . " " . $row['description'];

    }
}

Bu lütfen yürütmek ve ne gördüğünü söyle.