Php SQLite中的SELECT*不会返回表中的所有内容

Php SQLite中的SELECT*不会返回表中的所有内容,php,sqlite,select,Php,Sqlite,Select,我正在使用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 "&l

我正在使用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中的原因是,当我查看*.db文件时,我可以看到条目的文本

以下是一些具体的问题,可能有助于我更好地了解发生了什么:

我创建了一个名为blog的表。我使用查询函数将元组插入blog,就像我使用SELECT调用一样。当我使用LIKE删除元组时,这些元组是从数据库中删除的,还是仅从表blog中删除的?如果是后一种情况,如何让SQLite从数据库中完全删除元组


最后,我观察到一些奇怪的行为。在blog中添加了一个元组,blogdate为2009-12-1,我将其视为字符串,因为SQLite中没有日期或时间类型。当我使用上述代码运行PHP文件时,不会显示2009-12-1作为blogdate的条目。我运行了另一个PHP页面,用blogdate搜索元组,如2009-12-1,它显示在搜索结果中。当我使用上面的PHP为其选择*d时,2009-12-1的元组才显示出来。

要检查您的断言,即数据在数据库中,我建议在一个窗口中打开数据库

要检查您关于数据在数据库中的断言,我建议您在一个窗口中打开数据库

查看二进制数据库文件不足以显示数据库中确实存在记录。许多数据库实际上并不需要从数据文件中删除数据,因为那样会浪费时间。相反,它们可能会将该块标记为已删除,并在以后保存其他数据时覆盖该块。因此,如果您断言该记录在数据库中,因为您可以在.db文件中看到它,这并不意味着什么,您需要在一个程序中打开该文件,该程序旨在浏览数据库的内容,并查看它是否显示出来。

查看二进制数据库文件不足以表明数据库中确实存在一条记录。许多数据库实际上并不需要从数据文件中删除数据,因为那样会浪费时间。相反,它们可能会将该块标记为已删除,并在以后保存其他数据时覆盖该块。因此,您断言记录在数据库中,因为您可以在.db文件中看到它,这并不意味着什么,您需要在设计用于浏览数据库内容的程序中打开该文件,并查看它是否显示。

在文本/十六进制编辑器中查看DB文件时,记录的文本可能会显示,即使它在数据库中可能已标记为已删除


要完全删除这些已删除的记录,请尝试压缩数据库。

在文本/十六进制编辑器中查看DB文件时,记录的文本可能会显示出来,即使它在数据库中可能已标记为已删除


要完全删除这些已删除的记录,请尝试压缩数据库。

请详细说明您如何知道某个记录必须存在,但不在SELECT查询的结果集中。我们是否可以看到您试图提取的记录和/或某些输出?我知道它在testDB.db中,因为我可以看到文件中的条目。我将修改我的问题。请详细说明您如何知道某个记录必须存在,但不在SELECT查询的结果集中。我们是否可以看到您试图提取的记录和/或某些输出?我知道它在testDB.db中,因为我可以看到文件中的条目。我将修改我的问题。+1为了礼貌起见,说明是否有记录,并解释原因。我的问题是新手问题还是什么?不,我看不出你的代码有什么问题,我只是解释了为什么你会在原始数据库文件中看到它,但它可能不存在于你的表中。正如其他人所建议的,你应该使用一个数据库浏览器来查看你真正拥有的数据。但是,你真的很好,尼克。谢谢。+1对于记录的存在/不存在表示礼貌,并解释了原因。我的问题是新手问题还是什么?不,我看不出你的代码有什么问题,我只是解释了为什么你会在原始数据库文件中看到它,但它可能不存在于你的表中。正如其他人所建议的,你应该使用一个数据库浏览器来查看你真正拥有的数据。但是,你真的很好,尼克。谢谢