[英]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.