2017-07-26 2 views
2

サイトのセキュリティを強化するために、古いsqlite3データベースコードをsqlite3プリペアドステートメントに変換しようとしています。私はmysqlに切り替えることを検討していましたが、今のところ私はこれを最初に動作させたいと思います。SQLite3プリペアドステートメント重複した結果を選択

ここで間違っていたことはわかりませんが、結果はすべて2倍になります。ここで

は私のコードは次のとおりです。

$sql = $upc->prepare("SELECT `uid`, `model`, `biosmodel`, `upc`, `systemsku`, `brand`, `hardwareids`, `status`, `pendingHardware` FROM `builds` WHERE `uid`=:id"); 
$sql->bindValue(':id', $uid, SQLITE3_INTEGER); 
$result = $sql->execute(); 
echo "<pre>".print_r($result->fetchArray(),true)."</pre>"; 

私の結果は、私のすべてのキーを持つ配列であるが、そうのようなだけの重複情報との定期的な配列のキー0-8ように見えるにも重複エントリー、:

Array 
(
    [0] => 7 
    [uid] => 7 
    [1] => HP 15-AY041WM 
    [model] => HP 15-AY041WM 
    [2] => HP Notebook 
    [biosmodel] => HP Notebook 
    [3] => 889899757697 
    [upc] => 889899757697 
    [4] => X0H86UA#ABA 
    [systemsku] => X0H86UA#ABA 
    [5] => HP 
    [brand] => HP 
    [6] => [42,43,36,44,5,6,45,38,46,41,41,33] 
    [hardwareids] => [42,43,36,44,5,6,45,38,46,41,41,33] 
    [7] => 0 
    [status] => 0 
    [8] => 
    [pendingHardware] => 
) 

なぜこのようなことが起こっているのか分かりませんが、明らかにこの重複した情報はすべて不必要なものであるとは思われません。この問題を解決するにはどうすればよいですか?

+0

だろうSQLITE3_ASSOC

を渡します'。 –

+0

'$ result-> fetchArray()'は配列を保持していませんか?アレイを印刷するにはどうしたらいいですか? – GrumpyCrouton

+0

あなたは 'while'または' foreach'ループを使うことができます。重複行がある場合は、DISTINCTまたはGROUP BYを使用する必要があります。 –

答えて

3

fetchArray()デフォルトを使用すると、結果行が連想配列と数値インデックス配列として取得されます。唯一の連想配列を取得するために

は、あなたが `ますprint_r()`と `fetchArray()の両方を使っているからだとそれは

$result->fetchArray(SQLITE3_ASSOC); 

読むhttp://php.net/manual/en/sqlite3result.fetcharray.php

+0

8分で答えとして承認されます – GrumpyCrouton

関連する問題