1
    <?php
// Make a MySQL Connection
$mysqli = new mysqli("server", "user","pass","database") or die(mysqli_error());

$result = $mysqli -> query("SELECT * FROM testimage WHERE OCTET_LENGTH( IMAGE ) >200000 ") or die(mysqli_error());


if($result){
 // Cycle through results
while ($row = $result->fetch_assoc()) {



    file_put_contents($row['ID'].'.png', $row['IMAGE']);

}


// Free result set
$result->close();


}
?>

テストデータベースにlongblobオブジェクトとして画像を直接保存していますが、200kを超えるすべての画像を取得しようとしています。この方法でクエリを実行すると、2つのエラーが発生します。これらは以下に掲載されています。

長さをチェックせずにクエリを実行すると、同じエラーが発生します。

このphpは、それが重要な場合、macosx上の私のラップトップで実行されています。データベースに含まれる画像の数が少ない場合、この同じコードは正常に機能しました。このエラーに関する他の説明では、大きな結果セットについて言及していますが、テーブルの変更についても言及していますが、これは私が行っているとは思わないことです。

データベースには、1000枚の画像に約440メガバイトが含まれています。LONGBLOBオブジェクトとして保存

警告:5行目のGet_All_Images_DB_BLUEHOST2.phpの行パケット本文が空です

警告:mysqli :: query():(00000/0):Get_All_Images_DB_BLUEHOST2.phpの5行目

もう1つの情報として、エラーは常に約109〜120秒で発生します。

4

1 に答える 1

3
<?php
// Make a MySQL Connection
$mysqli = new mysqli("host", "user", "pass","database") or die(mysqli_error());
$result = $mysqli -> query("SELECT MAX(ID) FROM testimages ") or die(mysqli_error());
$data = mysqli_fetch_array($result);
$result->close();
$mysqli->close();

$maxid =  $data[0];
$off = 0;
$dur = 50;

for ($i = 1; $i <= ($maxid/50)+1; $i++){

$mysqli = new mysqli("host", "user", "pass","db") or die(mysqli_error());

$result = $mysqli -> query("SELECT * FROM testimage LIMIT $off,$dur ") or die(mysqli_error());



if($result){
 // Cycle through results
while ($row = $result->fetch_assoc()) {

    //echo($row['TAG']);
    //echo(":");

    //$row['IMAGE']
    echo ", ";
    echo ($row['ID']);

    file_put_contents($row['ID'].'.png', $row['IMAGE']);

}


// Free result set
$result->close();
$mysqli->close();


}
$off += 50;
}

?>

これは、結果セットを制限し、結果の最大数を取得し、LIMITを使用してその数を増やすことにより、上記のエラーを回避するための私の素朴な解決策です。

于 2013-01-23T15:34:26.947 に答える