PHP SQLite JSON数据复制

时间:2010-10-11 17:06:00

标签: php json serialization sqlite

我有以下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 个答案:

答案 0 :(得分:1)

$ row [1]和$ row ['message']都会为您提供相同的数据。这是因为技术使用列的数字索引而另一个使用名称。它们都包含在列中,因此您可以使用任一方式访问它们。它并不表示数据库本身存在任何重复。

在这里,您可以看到文档以及如何告诉PHP您想要哪个版本。默认情况下,它会同时为您提供:http://php.net/manual/en/sqlite3result.fetcharray.php

答案 1 :(得分:1)

默认情况下,数据包含数字键和字符串键,并在同一个数组中合并。

您需要使用$results->fetchArray(SQLITE3_NUM)$results->fetchArray(SQLITE3_ASSOC)分别获取数字和字符串键。默认值是SQLITE3_BOTH,我一直很讨厌。