簡體   English   中英

SQLite中的SELECT *不會返回表中的所有內容

[英]SELECT * in SQLite doesn't return everything in the table

我正在使用PHP從數據庫中獲取數據。

這是代碼:

<?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>";
    }
?>

但是由於某種原因,它不會返回我確定在數據庫中的條目。 我認為它在數據庫中的原因是,當我查看* .db文件時,可以看到條目的文本。

以下是一些特定的問題,可以幫助我更好地了解正在發生的事情:

CREATE一個名為blog的表。 INSERT元組到blog使用查詢功能我用SELECT通話一樣。 當我使用LIKE DELETE元組時,這些元組是從數據庫中刪除還是僅從表博客中刪除? 如果是后一種情況,如何使SQLite完全從數據庫中刪除元組?

最后,我觀察到一些奇怪的行為。 將一個元組添加到blog ,其blog blogdate為“ 2009-12-1”(我將其視為字符串,因為SQLite中沒有日期或時間類型)。 當我使用上述代碼運行PHP文件時,以2009-12-1作為blogdate的條目不會顯示。 我運行了另一個PHP頁面,該blogdate LIKE頁面的blogdate LIKE 2009-12-1,以搜索元組,它顯示在搜索結果中。 只有這樣,當我使用上述PHP為SELECT * d時,才會顯示2009-12-1的元組。

當您在文本/十六進制編輯器中查看數據庫文件時,記錄的文本可能會顯示,即使在數據庫中可能已將其標記為已刪除。

要完全刪除這些刪除的記錄,請嘗試壓縮數據庫。

查看二進制數據庫文件不足以顯示數據庫中實際存在記錄。 許多數據庫實際上並不在意從數據文件中刪除數據,因為那樣會浪費時間。 相反,他們可以將塊標記為“已刪除”,並在以后保存其他數據時覆蓋它。 因此,您斷言該記錄在數據庫中,因為您可以在.db文件中看到該記錄,這意味着什么,您需要在旨在瀏覽數據庫內容並查看其是否顯示的程序中打開該文件。

為了檢查的數據在數據庫中的斷言 ,建議您在數據庫瀏覽器中打開數據庫

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM