2016-03-30 4 views
1
$sql = "SELECT name FROM people WHERE id = '$id'"; 
$array = array();  
$q = $pdo->prepare($sql); 
$q->execute(); 
foreach ($pdo->query($sql) as $row) { 
$array[] = $row; 
} 

私の結果は次のとおりです。mySQLデータベースからアレイを作成するにはどうすればよいですか?

array(4) { 
    [0]=> 
    array(2) { 
    ["name"]=> 
    string(4) "fred" 
    [0]=> 
    string(4) "fred" 
    } 
    [1]=> 
    array(2) { 
    ["name"]=> 
    string(3) "sam" 
    [0]=> 
    string(3) "sam" 
    } 
    [2]=> 
    array(2) { 
    ["name"]=> 
    string(4) "alan" 
    [0]=> 
    string(4) "alan" 
    } 
    [3]=> 
    array(2) { 
    ["name"]=> 
    string(63) "john" 
    [0]=> 
    string(63) "john" 
    } 
} 

しかし、私は必要があります:

Array 
(
    [fred] => fred 
    [sam] => sam 
    [alan] => alan 
    [john] => john 
) 

私は例えば試してみました:

foreach ($pdo->query($sql) as $key => $row) {.. 

とも

foreach ($pdo->query($sql) as $row) { 
$array[] = $row; 
$row = array_combine(array_values($row), array_values($row)); 
} 
$q = $pdo->prepare($sql); 
$q->execute(); 
$result = $q->fetchAll(); 
print_r($result); 

答えて

1

利用はfetchAll()

foreach ($pdo->query($sql) as $row) { 
    $array[$row['name']] = $row['name']; 
} 
+0

ありがとう、それは動作します! – Jarla

+0

あなたが選んだのはどれですか?ところで、PDOには他にも魔法のモードがあり、一目瞭然です。私はチートシートを作る必要があります... –

+0

私は2番目のソリューションを選択していました。私の声明がなぜ安全でないのか教えてください。 – Jarla

0

には、以下の変更を行います。しかし、バニラではなく、秘密の議論があるENTはPDO::FETCH_COLUMN

$sql = "SELECT name FROM people WHERE id = ?"; 
$q = $pdo->prepare($sql); 
$q->execute([$id]); 
$array = $q->fetchAll(PDO::FETCH_COLUMN); 

と呼ばれるそれはあなたがSQLにあなたのコードが脆弱になって準備された文に完全に間違った方法を使用しているこの

Array 
(
    [0] => fred 
    [1] => sam 
    [2] => alan 
    [3] => john 
) 

ノートのような名前の単一次元配列を取得します注入。これは上のコードで修正されています。

あなたがキーと値の両方の取得を主張する場合は

$sql = "SELECT name, name FROM people WHERE id = ?"; 
$q = $pdo->prepare($sql); 
$q->execute([$id]); 
$array = $q->fetchAll(PDO::FETCH_KEY_PAIR); 

に続き、あなたが

+0

グレートを尋ねたとして、それはあなたの正確な配列を与えるよう、そして、あなたのコードを変更!非常にうまくいっています:o) – Jarla

+0

私はそれが助けられてうれしいです、私は私の答えにあなたの承認/受諾を求めるでしょう:-) –

+0

@ジャラは人々がそれに頼ることができるように答えを承認してください。 –

4

使用fetchAll

が、私はいつも同じ結果を得る...

+0

また、フェッチモードを指定する必要があります。 – fusion3k

+0

ありがとうございます! :)このメソッドは、アシュワニスの提案にいくつかの利点を持っていますか、それとも自分の好みに合わせて選択するのですか – Jarla

+0

これはPDOのビルド機能で、ループなしであなたの意思決定結果を得ることができます – Saty

関連する問題