php - body 错误中的空行数据包,图像结果集很大

标签 php mysql

    <?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 的图像。当我以这种方式查询时,我收到两个错误。这些张贴在下面。

如果我在不检查长度的情况下进行查询,我会得到同样的错误。

如果重要的话,这个 php 正在我的 mac os x 笔记本电脑上运行。当数据库包含较少数量的图像时,同样的代码工作正常。这个错误的其他解释提到了大结果集,但他们也提到了改变表格,我不相信我正在做。

该数据库在 1000 张图像中包含大约 440 兆。存储为 LONGBLOB 对象

警告:第 5 行 Get_All_Images_DB_BLUEHOST2.php 中的空行数据包主体

警告:mysqli::query(): (00000/0): 在第 5 行的 Get_All_Images_DB_BLUEHOST2.php 中

另一条信息,错误总是发生在大约 109 - 120 秒。

最佳答案

<?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 递增该数量来避免上述错误的幼稚解决方案。

关于php - body 错误中的空行数据包,图像结果集很大,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13967632/

相关文章:

php - SQL 多重连接结果为空

php - 在 WHERE 子句中使用变量

php - 切换帐户后,表格上的打印信息发生更改

php - mysql_fetch_row() 期望参数 1 是给定的资源、对象。?

php - 操作数不能正常工作。拉维

php - 用于遍历日期的 MySQL SELECT

java - 将数据库配置查询值传递给 native 查询

php - 在通过 html 生成的 excel 单元格中添加新行

php - Laravel ORM 查询生成器

MySQL + Entity Framework : Can't delete object