我开始尝试使用sqlite来托管小型网站,并在我自己的个人服务器上,我遇到了一种损坏整个想法的格式。php sqlite_fetch_array损坏的结果
我有一个非常简单的测试示例,在sqlite 2.x数据库的两行表中,我用5.2.12托管,我也尝试过使用PDO sqlite3数据库,问题是这样的。 “用户”表,保存一些信息,该表是这样的
字段(ID,用户名,名,姓,密码)
有两个条目到表中,他们
进入(1,克里斯,克里斯托弗,托马斯,123) 条目(2,亚当,亚当,唐纳,456)
问题是有点奇怪,当我查询这样的数据库:
查询(”选择*来自用户,其中id = 2“)
我得到正确的结果,就像下面这样:
条目(2,亚当,亚当,坦纳,456)
当我要求这样的查询中的所有行(“SELECT * FROM用户“)我得到这个:
项(1,克里斯·克里斯托弗,坦纳,456) 条目(2,亚当斯,Adamstopher,坦纳,456)
你看到了什么似乎已经发生了什么?第二个条目中的信息比第一个条目的字符少,因此它似乎只是用第二个条目覆盖数据,导致一些损坏。
克里斯·亚当斯 ---- <在S来自克里斯
克里斯托弗 Adamstopher < ---该stopher来自英联邦人权stopher
的代码非常简单,这是我运行的,我尝试在sqlite2上直接调用sqlite_ *,然后在同一个数据库的sqlite2和sqlite3版本上使用PDO,只是为了确保有任何疑问。
(顺便说一句:我添加了一些简单的html标记更改和东西,使它们在stackoverflow网站中都看起来更好,这些更改不在原始代码中,但它们只是像h1-> p或包装东西与<前>保存代码格式等)。
<p>TEST 1 with direct sqlite_* calls</p>
<?php
try{
$connection = sqlite_open("../playground.sqlite",0666,$error);
$handle = sqlite_query("select * from users",$connection);
$numResults = sqlite_num_rows($handle);
for($a=0;$a<$numResults;$a++){
print("<pre>".print_r(sqlite_fetch_array($handle,SQLITE_ASSOC),true)."</pre>");
}
}catch(Exception $e){
die("EXCEPTION OCCURED: '$error'");
}
?>
<p>PDO TEST: SQLITE 2.x</p>
<?php
$connection = new PDO('sqlite2:../playground.sqlite');
$handle = $connection->query("SELECT * FROM users");
if($handle){
$result = $handle->fetchAll(PDO::FETCH_ASSOC);
print("<pre>".print_r($result,true)."</pre>");
}else{
var_dump($connection->errorInfo());
print("query returned negatively");
}
?>
<p>PDO TEST: SQLITE 3.x</p>
<?php
$connection = new PDO('sqlite:../playground.sqlite3');
$handle = $connection->query("SELECT * FROM users");
if($handle){
$result = $handle->fetchAll(PDO::FETCH_ASSOC);
print("<pre>".print_r($result,true)."</pre>");
}else{
var_dump($connection->errorInfo());
print("query returned negatively");
}
?>
运行这段代码的输出是:
TEST 1 with direct sqlite_* calls
Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
PDO TEST: SQLITE 2.x
Array
(
[0] => Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
[1] => Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
)
PDO TEST: SQLITE 3.x
Array
(
[0] => Array
(
[id] => 1
[username] => chris
[forename] => Christopher
[surname] => Thomas
[password] => 123
)
[1] => Array
(
[id] => 2
[username] => adams
[forename] => Adamstopher
[surname] => Tanner
[password] => 456
)
)
如果你知道为什么会这样,谢谢你让我知道!
对不起,上面的一些文本格式,似乎网站有点改变了一些小事情,我希望它不会太多烦恼 – 2010-07-10 19:48:35
如果你的问题的格式不是你所期望的,只需编辑! – 2010-07-10 19:53:23
我试图修复它,但我回滚了。预览是越野车,虽然看起来不错,但最终的结果是嵌套的框。 – Artefacto 2010-07-10 19:55:14