我開始嘗試使用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