SQLite SELECT * tabloda her şeyi dönmez

3 Cevap php

Ben bir veritabanından veri almak için PHP kullanıyorum.

İşte kod:

<?php  
    $db = new SQLiteDatabase("testDB.db");
    $query = $db->query("SELECT * FROM blog ORDER BY blogdate DESC");
    while($entry = $query->fetch(SQLITE_ASSOC)) { //only one blog entry per day
        echo "<a href=\"display.php?date=".$entry['blogdate']."\">".$entry['blogdate']."</a><br>";
    }
?>

Ama nedense ben belli veritabanında olduğum bir girdi döndürmez. Ben db olduğunu düşünüyorum nedeni *. Db dosyasını görüntülemek zaman giriş metnini görebilirsiniz olmasıdır.

Burada beni daha iyi oluyor anlamanıza yardımcı olabilecek bazı spesifik sorular şunlardır:

Adı I CREATE, bir tablo blog. I INSERT I SEÇ çağrıları ile yaptığı gibi blog sorgulama fonksiyonunu kullanarak içine tuples. I DELETE dizilerini GİBİ kullanırken, veritabanından silinmeden bu satırlardır, ya da sadece masa blog silinir ediliyor? Bu ikinci durumda, nasıl SQLite tamamen veritabanından tuple silmek için alabilirim?

Son olarak, bazı garip davranışları tespit ettik. Bir demet "2009/12/01" (SQLite'ta tarih veya zaman tipi yoktur, çünkü ben bir dize olarak tedavi olan) olarak blogdate ile blog eklenir. Ben yukarıdaki kod ile PHP dosyasını çalıştırdığınızda, gibi 2009/12/01 ile giriş blogdate görünmüyor. I blogdate LIKE 2009/12/01 dizilerini arar başka bir PHP sayfasını koştu ve arama sonuçlarında gösterdi. Sadece o 2009/12/01 up gösterisinin için başlığın ne zaman yukarıda PHP kullanarak I SELECT * d.

3 Cevap

Eğer veritabanında silinmiş olarak işaretlenir edilmiş olsa bile bir metin / hex düzenleyici bir DB dosyayı görüntülemek zaman kaydının metin ortaya çıkabilir.

Tam olarak bu silinen kayıtları kaldırmak için, veritabanı sıkıştırma deneyin.

Ikili veritabanı dosyasını görüntülerken bir rekor aslında bir veritabanında varolduğunu göstermek için yeterli değildir. O zaman kaybı olacak gibi birçok veri tabanları, aslında veri dosyasından veri kaldırmakla zahmet etmeyin. Bunun yerine, "silinmiş" olarak blok bayrak olabilir ve ek veri kaydederken daha sonra üzerine. Yani, size veritabanının içeriğine göz atmak için tasarlanmış bir program dosyasını açın ve o kadar gösterir olmadığını görmek gerekir, dosya hiçbir anlamı. Db görebilirsiniz çünkü kayıt veritabanında olduğunu iddiasını.

your assertion veri veritabanında olup olmadığını kontrol etmek için, ben bir database browser veritabanını açarak öneririm.