показать изображение из blob mysql

Привет, У меня есть таблица изображений в моей базе данных. Они сохраняются как blob вместе с такими деталями, как тип и имя изображения.

У меня проблема с изображением, все, что я получаю, это белая коробка с красным крестом. код:

<?php include '../connection.php'; $ID = $_GET['id']; $query = "SELECT * FROM `images` WHERE `image_id` = '$ID'"; $result=mysql_query($query); $row = mysql_fetch_array($result); $image = $row['image']; $image_type= $row['image_type']; header("Content-type: $image_type"); print $image; exit; ?> 

благодаря

Ну вот короткий ответ.

 <?php include '../connection.php'; $id = (int)$_GET['id']; $query = "SELECT * FROM `images` WHERE `image_id` = '$id'"; $result=mysql_query($query); $row = mysql_fetch_array($result); $image = $row['image']; $image_type= $row['image_type']; $size = $row['image_size']; //alternative /* list($image, $image_type, $size) = array( $row['image'], $row['image_type'], $row['image_size'] ); */ $ext = explode('/', $image_type); $name = $id . '.' . $ext[1]; header("Content-type: $image_type"); header("Content-length: $size"); header("Content-Disposition: attachment; filename=$name"); print $image; exit; 

Проверьте свой blobtype как наименее MEDIUMBLOB, который способен хранить данные до 16M

Чтобы отладить это, я предлагаю закомментировать строку заголовка Content-type, а затем нажать URL-адрес непосредственно в браузере. Это позволит вам видеть любые ошибки, предупреждения или уведомления, которые может испускать PHP.

Несколько вещей, чтобы попробовать

  1. возможно, что-то не работает, и он возвращает сообщение об ошибке в html вместо ожидаемого изображения

  2. является content_type, сохраненным правильно в базе данных, или вы просто сохраняете расширение файла изображения

тип контента должен выглядеть примерно так:

 image/gif image/jpeg 

Похоже, это может сработать, что случилось?

Попробуйте явно указать поля:

  SELECT image, image_type FROM ... 

Что происходит, когда вы запускаете запрос из базы данных?

Загружаете ли вы изображение:

 <img src="image.php?id=12"> 

Или вы загружаете PHP как свою собственную страницу?

возможно, вы могли бы попробовать

 $row = mysql_fetch_assoc($result); 

вместо

 $row = mysql_fetch_array($result); 

Вы сказали в комментарии, что таблица изначально сказала «[BLOB – 64.0 KiB]», но вы изменили ее на «MEDIUMBLOB». Это расширит размер, который вы можете сохранить, но все ваши существующие данные по-прежнему будут усечены до 64KiB.

Убедитесь, что тип поля, который вы используете, достаточно велик, чтобы хранить данные, которые вы хотите сохранить (16 МБ в MEDIUMBLOB или ~ 4gb в LONGBLOB, я уверен), а затем снова вставьте все ваши данные.

Помимо упомянутых проблем безопасности, я не понимаю, почему код не должен работать иначе, чем проблема с базой данных.

Или, если вы не хотите создавать отдельный php-файл, вы можете его встроить

 <?php // retrieve blob into $img ?><img src='data:image/png;base64,<?php echo base64_encode( $img );?>' alt='Image <?php echo $id;?>'>