0

この質問は、この前の質問に関連しています:PDO、MySQL-関数から配列を返すにはどうすればよいですか?

しかし、それは十分に具体的ではないと感じました。

変数の各行を配列内の独自のキーで返し、呼び出し元のプログラムで使用できるようにします。

これは私がこれまでに持っているコードですが、それが正しいか、あるいは正しい方向に進んでいるかどうかはわかりません。

$total = $dbh->prepare("SELECT COUNT(post_id) FROM mjbox_posts");
        $stmt = $dbh->prepare("SELECT * FROM mjbox_images JOIN mjbox_posts USING (post_id) WHERE post_id = ?");
        $stmt->bindParam(1,$post_id);
        $stmt->execute();

        $resultarray = array();

            while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            for($i=0;$i<=$total;$i++){

                $resultarray[] = array("id"=>$row['img_id'],"filename"=>$row['img_file_name']);

            }

        }

        return $resultarray;

データは配列に挿入されて呼び出し元のプログラムに戻されるようですが、配列内の各データを2回複製しているようです。

Array ( [0] => Array ( [0] => Array ( [id] => 5 [filename] => fullsize/8520430289728860armor.jpg ) [1] => Array ( [id] => 5 [filename] => fullsize/8520430289728860armor.jpg ) [2] => Array ( [id] => 6 [filename] => fullsize/5535575154865203bg1.jpg ) [3] => Array ( [id] => 6 [filename] => fullsize/5535575154865203bg1.jpg ) [4] => Array ( [id] => 7 [filename] => fullsize/7598226850012898images.jpg ) [5] => Array ( [id] => 7 [filename] => fullsize/7598226850012898images.jpg ) ) )
4

1 に答える 1

2

そのコードは壊れています。mysqlで準備されたステートメントハンドルになりますが、内部ループ$totalの整数比較で使用しています。for(...)

他のクエリでは、配列に保存している2つのフィールドのみが必要な場合に、テーブル内のすべてのフィールドをフェッチすることで多くのリソースを浪費しています。

その混乱を単純化して:

クエリ:

SELECT img_id AS id, img_file_name AS filename etc....

php:

$resultarray = array();
while($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
   $resultarray[] = $row;
}
于 2012-06-05T18:02:02.760 に答える