2017-02-06 18 views
0

mysqlデータベースのデータをphp配列に取得する際に問題が発生しました。以下のコードを実行すると、クエリは対応する行を2回または3回フェッチします。 アップロードの名前と日付が記載されたファイルのデータベースがあります。 私は4つのファイルを持っているとします(テスト済み): File1、File2、File3、File4。 (それは場合に役立ちます) コードはエコーう:MYSQLの結果をPHP配列に入れよう

$query = $pdo_con->query("SELECT * FROM uploads WHERE active = 1 and owner = '$current_user' Order By upload_id DESC"); 

while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
    $new_array[] = $r; 
    $new_array[$r['name']] = $r; 
    $new_array[$r['uploaded']] = $r; 
} 
foreach($new_array as $array){ 
    echo $array['name']; 
    echo $array['uploaded']; 
} 

は、私は一度だけ、各ファイルをエコーし​​、正しい順序で(降順コードを持っているしたいと思います:ここで

File1 and its date 
File1 and its date 
File4 and its date 
File2 and its date 
File2 and its date 
File3 and its date 
File3 and its date 
File4 and its date 
File4 and its date 

コードです(自動増分)

+0

あなたは '$のnew_array'に' $ row'複数回追加されます。各行につき3回。あなたが一度それを表示することを期待している場合は、一度だけ追加してください。また、pdoにはすべての行を配列に取得する 'fetchAll'メソッドがあります。 –

+0

クエリを実行すると、結果に複数の行が表示されますか? '$ new_array'を使って何もしていないのであれば、ちょうどその場所にエコーするのではなく、' fetchAll() 'を使ってループするのはなぜですか? – nerdlyist

答えて

1

あなたの配列を作成する方法は、毎回ループを通して3つの要素を与えることです。試してみてください:

$i; 
while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
    $new_array[$i][$r['name']] = $r['name']; 
    $new_array[$i][$r['uploaded']] = $r['uploaded']; 
    $i++; 
} 

をしかし、あなたはあなたのクエリ内の列を指定した場合、それははるかに簡単です:次に

SELECT name, uploaded FROM uploads 
    WHERE active = 1 AND owner = '$current_user' 
    ORDER BY upload_id DESC 

$new_array = $query->fetchAll(PDO::FETCH_ASSOC); 

代わりに、あなたが必要がない場合$new_arrayが、表示したいだけ:

while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
    echo $r['name']; 
    echo $r['uploaded']; 
} 
+0

ありがとう!あなたの2番目のオプションは問題を解決しました – entlu

0

これはそれを行う必要があります。

$query = $pdo_con->query("SELECT * FROM uploads WHERE active = 1 and owner = '$current_user' Order By upload_id DESC"); 

while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
    echo $r['name']; 
    echo $r['uploaded']; 
} 

または:

$query = $pdo_con->query("SELECT * FROM uploads WHERE active = 1 and owner = '$current_user' Order By upload_id DESC"); 

while($r = $query->fetch(PDO::FETCH_ASSOC)) { 
    $new_array[] = ['name'=>$r['name'], 'uploaded'=>$r['uploaded']]; 
} 
foreach($new_array as $array){ 
    echo $array['name']; 
    echo $array['uploaded']; 
} 
関連する問題