PHP SQLite JSON Дублирование данных - PullRequest
2 голосов
/ 11 октября 2010

У меня есть следующий код PHP:

$testMessage = "TESTMESSAGE";

$db = new SQLite3('messages.sq3');
$db->exec('CREATE TABLE messages(id INTEGER PRIMARY KEY, message CHAR(255));');
$db->exec("INSERT INTO messages (message) VALUES ('$testMessage');");

$results = $db->query('SELECT * FROM messages ORDER BY id DESC LIMIT 5');

while ($row = $results->fetchArray()) {
    print_r($row);
}

Полученный print_r:

Array ( [0] => 1 [id] => 1 [1] => TESTMESSAGE [message] => TESTMESSAGE )

Почему эти данные дублируются? Это просто способ представления массива или действительно две копии строки TESTMESSAGE? Изучая файл sqlite, я вижу только один файл, хранящийся там. Я пытаюсь сериализовать вывод через JSON, и это дублирование переносится в сериализацию.

Ответы [ 2 ]

1 голос
/ 11 октября 2010

По умолчанию данные с цифровыми и строковыми ключами объединяются в одном массиве.

Вам необходимо использовать $results->fetchArray(SQLITE3_NUM) или $results->fetchArray(SQLITE3_ASSOC), чтобы получить числовые и строковые ключи соответственно.По умолчанию используется SQLITE3_BOTH, который я всегда ненавидел.

1 голос
/ 11 октября 2010

И $ row [1], и $ row ['message'] предоставят вам одинаковые данные. Это потому, что на технике используется числовой индекс столбца, а другой использует имя. Они оба включены в столбец, так что вы можете использовать любой из них для доступа к ним. Это не указывает на какое-либо дублирование в самой базе данных.

Здесь вы можете увидеть документацию и узнать, какую версию PHP вы хотите узнать. По умолчанию он дает вам оба: http://php.net/manual/en/sqlite3result.fetcharray.php

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