1

ID でテーブル内のいくつかの画像を選択する必要があります (重複エントリが許可されています)。

私のメインコード:

...
$selectedImages = $this->selectImages($selectedNews['ID'][$i]);
//Check values
echo 'Count of Array: '.sizeof($selectedImages)."\n";
if (sizeof($selectedImages) == 0) {
    $this->html[] = '-';
} else {
    for ($j = 0; $j < sizeof($selectedImages); $j++) {
        $this->html[] = '<a class="fancybox single_image" href="/'.$selectedImages['Path'][$j].$selectedImages['Name'][$j].'"><img src="thumbnail/thumb.php?src=../../'.$selectedImages['Path'][$j].$selectedImages['Name'][$j].'&amp;h=50&amp;w=50" alt="'.$selectedImages['Name'][$j].'" /></a>';
    }
}
...

これが私の方法です:

private function selectImages($id) {
        $selectedImages = array();

        $sql = "SELECT
                    Name,
                    Path
                FROM 
                    News_images
                WHERE
                    Pos = '".mysqli_real_escape_string($this->db, $id)."'
                ";

        $stmt = $this->db->prepare($sql);

        if (!$result = $this->db->query($sql)) {
            echo 'Datenbankfehler\n';
            echo $this->db->error;
        }

        $i = 0;
        while ($row = $result->fetch_assoc()) {
            $selectedImages['Path'][$i] = $row['Path'];
            $selectedImages['Name'][$i] = $row['Name'];
            $i++;
        }

        echo 'Selected: '.$i.' images ,';

        return $selectedImages;
}

次の出力が得られます: 選択された 1 つの画像、配列の数: 2 選択された 0 の画像、配列の数: 0 選択された 4 つの画像、配列の数: 2

選択された画像の実際の量は正しいものです。しかし、配列の数は実際の選択の数と一致しません。

ここで何が問題なのですか?

4

1 に答える 1

1

sizeof($selectedImages);2実際には「パス」と「名前」の2つの要素があるため、表示されます。使用する:

sizeof($selectedImages['Path']) ...

また

sizeof($selectedImages['Name']) ...

現在の配列構造を尊重します。


ところで:次のような配列構造は良くないでしょうか?;)

$selectedImages = array (
    array('Path' => '...', 'Name' => '...'),
    array('Path' => '...', 'Name' => '...'),
    ....
);

これを実現するには、mysql フェッチ コードを単純化する必要があります。

$selectedImages = array();
while ($row = $result->fetch_assoc()) {
    $selectedImages[] = $row;
}
于 2013-04-10T01:09:04.440 に答える