0

PHP PDOとMySQLを使用しており、MySQLテーブルを次のように変換したいと思います。

|Listing ID | Image ID |
|  1234     |     1    |
|  1234     |     2    |
|  1234     |     3    |
|  1235     |     1    |
|  1235     |     2    |

以下のようなPHP配列に解析し、PDOを使用して別のMySQLテーブルに挿入できます。

[url/path/1234-1:::url/path/1234-2:::url/path/1234-3, url/path/1235-1:::url/path/1234-2]

これが私がこれまでに書いたコードです。whileループは最初のリスト文字列のみを取得し、無限ループを引き起こすため、動作に問題があると思います。

//Set folder path
$target_path = realpath($_SERVER['DOCUMENT_ROOT']). "\path\uploads\\";

//Query to download all listing IDs in Markers table 
$query = $db->query("SELECT * FROM image");
$row = $query->fetch(PDO::FETCH_ASSOC);
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
$temp = $target_path.$row['L_ListingID']."-".$row['L_ImageID'].".jpg";
   //ListingID equals ListingID, append to array
   $LI = substr($temp, 40, 8);
   while($LI = $LI) {
    $temp = $temp.":::".$temp;
    echo $temp;
   }
}

これは無限ループである出力です。テーブルの2番目の項目から始まり、そこにぶら下がっていることに注意してください。

C:\path\uploads\40532208-2.jpg:::C:\path\uploads\40532208-2.jpgC:\C:\path\uploads\40532208-2.jpg...ad infinitum
4

1 に答える 1

1

while($LI = $LI)無限ループが発生します。

私はそれがあなたが望むものだと思います

$target_path = realpath($_SERVER['DOCUMENT_ROOT']). "\path\uploads\\";
$query = $db->query("SELECT * FROM image");
while ($row = $query->fetch(PDO::FETCH_ASSOC)) {
   $temp[] = $row;
}
foreach($temp as $i=>$v){
    $line = $v['L_ListingID']."-".$v['L_ImageID'].".jpg";
    $prod[] = $line.($temp[$i] == $temp[$i+1])?":::":",";
}

echo trim(implode($prod),",");

コードはテストされていませんが、方向性はそこにあると思います。

于 2012-12-27T03:58:51.957 に答える