【问题标题】:MySQL selecting 20.000 rowsMySQL 选择 20.000 行
【发布时间】:2026-01-31 09:15:01
【问题描述】:

我有一个用于保存文章的数据库。不幸的是,无论出于何种原因,他们将图片信息存储在数据库中的 BLOB 中。现在我需要创建包含图片数据的文件夹 - 这很好,但是当我尝试选择更多的数据时,脚本失败或遇到错误(返回错误)。您能以某种方式帮助我查询 16.000-20.000 行并将其提取到文件中吗?

这是我的代码

    <?php

$dbuser = 'user';
$dbpass = 'pass';

try {
    $db = $dbh = new PDO('mysql:host=localhost;dbname=Tventas', $dbuser, $dbpass);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
    $db->setAttribute(PDO::ATTR_ERRMODE, PDO::NULL_EMPTY_STRING);
}

catch (Exception $e) {
    echo 'Caught exception: ',  $e->getMessage(), "\
";
}
try {

    $sql="SELECT id_imagen, imagen FROM imagen900";
    //$stmt = $db->prepare($sql);
    //$stmt->execute();
    //$products = $stmt->fetchAll(PDO::FETCH_ASSOC);

    foreach ($db->query($sql) as $row){

    $filename = $row['id_imagen'].".jpg";

        if (!empty($row['imagen'])) {
        $blob=$row['imagen'];

            if (file_exists($filename)){
                echo "<pre>Datei bereits vorhanden: ";
                print_r($filename);
                echo "</pre>";
            }
            else
            {
                file_put_contents($filename,$blob);
                echo "<pre>";
                print_r($filename);
                echo "</pre>";
            }
        }
    }
}

catch (PDOException $e) {
    echo"Whoops! Something went wrong!";
    echo" Query with error: ".$sql;
    echo" Reason given:".$e->getMessage()."\
";
    return false;
}

?>

【问题讨论】:

  • 这里有一个很好的解决方案*.com/questions/4646533/…
  • 您应该在分段中进行查询,即先执行 0-200 行,然后执行 200-400 行。

标签: php mysql rows multiple-columns


【解决方案1】:

您正在尝试将所有 20 000 张图像加载到内存中。

$products = $stmt->fetchAll(PDO::FETCH_ASSOC);

尝试循环遍历结果集。

$sql = "SELECT id_imagen, imagen FROM imagen900";
foreach ($db->query($sql) as $row) {
  ...
}

【讨论】:

  • @Dreshar 和 file_put_contents($file, $row, FILE_APPEND); 在 foreach 循环中存储数据
  • 一直在尝试,现在我得到了 Waning: Invalid argument provided for foreach() in index.php on line 23 - 以上代码更新
  • 有趣的是,如果我限制 SQL,例如“LIMIT 1000”,否则它可以完美运行 - 无效参数
  • 我想我知道为什么我得到了无效的论点。庞大的数据太多无法查询,所以它返回 false - php 告诉我我提供了一个无效的参数。但我仍然不明白如何正确查询。