У меня есть база данных для работы, где хранятся статьи. К сожалению и по какой-то причине, они сохранили информацию об изображении в BLOB в базе данных. Теперь мне нужно создать папки, которые содержат данные изображений — это прекрасно работает, но когда я пытаюсь выбрать больший объем данных, сценарий не выполняется или сталкивается с ошибками (возвращает false). Можете ли вы как-нибудь помочь мне запросить 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;
}
?>
Вы пытаетесь загрузить все 20 000 изображений в память.
$products = $stmt->fetchAll(PDO::FETCH_ASSOC);
Попробуйте вместо этого просмотреть набор результатов.
$sql = "SELECT id_imagen, imagen FROM imagen900";
foreach ($db->query($sql) as $row) {
...
}
Других решений пока нет …