繁体   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