php sqlite_fetch_array bozuk sonuçlar

0 Cevap php

Ben küçük web sitelerini barındırmak için sqlite kullanmaya çalışıyor başladı ve benim kendi kişisel sunucusunda, ben tür fikrine zehirleyen bir glich koştu.

Ben bir sqlite 2.x veritabanında bir iki satır masada, ben 5.2.12 ile barındırılan oluyorum, çok basit bir test örneği var, ben de PDO Sqlite3 veritabanı ile denedim, sorun bu. "Kullanıcılar" masa, tablo, bu gibi, bazı bilgi tutar

alanlar (id, adı, soyadı, soyadı, şifre)

İki girişleri tabloya vardır, bunlar

entry(1,chris,Christopher,Thomas,123) entry (2, adam, Adam, Tanner, 456)

Bu gibi veritabanı sorgu zaman sorun biraz garip:

Sorgu ("select * from users where id = 2")

Ben bu aşağıdaki gibi, doğru sonuçlar elde:

entry (2, adam, Adam, Tanner, 456)

Ben bu sorgu gibi TÜM satırları, ("kullanıcıların SELECT *") talep ettiğinizde ben bu olsun:

entry(1,chris,Christopher,Tanner,456) entry(2,adams,Adamstopher,Tanner,456)

Eğer olmuş görünüyor görüyor musun? İkinci girişinde bilgiler, ilk girişi daha az karakter, bu yüzden sadece bazı yolsuzluk neden ikinci girişi ile veri yazılmadan gibi görünüyor.

chris adams<---- The s comes from chris

Christopher Adamstopher <--- The stopher comes from chri*stopher*


Kod Sadece emin herhangi bir şüphe yapmak için, * SQLite2 ilgili aramaları ve sonra PDO SQLite2 ve aynı veritabanında Sqlite3 sürümleri doğrudan sqlite_ deneyin, bu ben koşmak ne, çok basittir.

(BTW: Ben bütün stackoverflow web sitesinde daha iyi görünmesi için bazı basit html biçimlendirme değişiklikleri ve bir şeyler katma, bu değişiklikler orijinal kodu değil, ama onlar

 ile h1-> p veya sarma gibi şeyler sadece şeyler ,) kod biçimlendirme, vb korumak için.

<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");
    }
?>

Bu kod çalıştırmasını çıktı:

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
        )
)

Bu durumda neden biliyorsanız, bana bildirdiğiniz için teşekkürler!

0 Cevap