SELECT * в SQLite не возвращает все в таблице - PullRequest
0 голосов
/ 03 декабря 2009

Я использую 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.

Вот некоторые конкретные вопросы, которые могут помочь мне лучше понять, что происходит:

I CREATE таблица с именем blog. Я INSERT кортежем в blog, используя функцию запроса, как я делал с вызовами SELECT. Когда я DELETE использую LIKE для кортежей, эти кортежи удаляются из базы данных или только из блога таблицы? Если это последний случай, как мне заставить SQLite полностью удалить кортеж из базы данных?

Наконец, я заметил странное поведение. К blog добавляется кортеж с blogdate как «2009-12-1» (который я рассматриваю как строку, потому что в SQLite нет типа даты или времени). Когда я запускаю файл PHP с вышеуказанным кодом, запись с 2009-12-1 как blogdate не отображается. Я запустил другую страницу PHP, которая ищет кортежи с blogdate LIKE 2009-12-1, и она появилась в результатах поиска. Только тогда появился кортеж для 2009-12-1, когда я SELECT * d для него использовал PHP выше.

Ответы [ 3 ]

4 голосов
/ 04 декабря 2009

Текст записи может отображаться при просмотре файла БД в текстовом / шестнадцатеричном редакторе, даже если он был помечен как удаленный в базе данных.

Чтобы полностью удалить эти удаленные записи, попробуйте сжать базу данных.

1 голос
/ 04 декабря 2009

Просмотр двоичного файла базы данных недостаточен, чтобы показать, что запись действительно существует в базе данных. Многие базы данных не занимаются удалением данных из файла данных, так как это будет пустой тратой времени. Вместо этого они могут пометить блок как «удаленный» и перезаписать его позже при сохранении дополнительных данных. Итак, вы утверждаете, что запись находится в базе данных, потому что вы можете видеть ее в файле .db, ничего не значит, вам нужно открыть файл в программе, предназначенной для просмотра содержимого базы данных, и посмотреть, появляется ли она.

0 голосов
/ 04 декабря 2009

Чтобы проверить ваше утверждение , что данные находятся в базе данных, я бы предложил открыть базу данных в браузере базы данных .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...