PHP: получить изображение из MySQL с помощью PDO - PullRequest
3 голосов
/ 14 мая 2011

Я рефакторинг некоторого старого кода, включая переписывание основных запросов MySQL для использования PDO.

Следующее прекрасно работает во всех браузерах и для всех типов изображений:

$query = 'SELECT image FROM image WHERE imageid=' . $image_id;
$result = mysql_query($query, $db_conn); querycheck($result);
header("Content-type: image");
echo mysql_result($result, 0);

К сожалению, однако я переписываю его с помощью PDO, он не работает. Я просмотрел всю документацию PDO и стандартный поиск в Интернете, но ни один из советов / решений не сработал.

Как можно легко получить и получить изображение из MySQL с помощью PDO и отобразить его?

Редактировать 1:

Мэтью Ратцлофф дает то, что должно быть очевидным ответом ниже, но это не работает. Вот фактический код, который я тестирую с помощью PDO (и я перепробовал много вариантов / параметров):

$connectstring_temp = 'mysql:host=' . $A . ';dbname=' .$B;
$dbh_temp = new PDO($connectstring_temp, $login, $password);
#$dbh_temp->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
#$dbh_temp->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY,true);

$sql = "SELECT image FROM image WHERE imageid=" . $image_id;
$query = $dbh_temp->prepare($sql);
$query->execute();

$query->bindColumn(1, $image, PDO::PARAM_LOB);
$query->fetch(PDO::FETCH_BOUND);
header("Content-Type: image");
echo $image;

Я сохранил тот же синтаксис, хотя для окончательного кода $ image_id должен быть передан в качестве параметра. Код выше НЕ работает. PDO отлично работает для всех других запросов всех типов.

Ответы [ 4 ]

3 голосов
/ 14 мая 2011

Вам необходимо параматизировать значение imageid и связать параметр с PDO::PARAM_LOB:

$sql = "SELECT image FROM image WHERE imageid=:id";
$query = $db_conn->prepare($sql);
$query->execute(array(':id' => $image_id));

$query->bindColumn(1, $image, PDO::PARAM_LOB);
$query->fetch(PDO::FETCH_BOUND);
header("Content-Type: image");
echo $image;

Конечно, вы также захотите указать полный, правильный тип контента (например, image / png).).

0 голосов
/ 20 мая 2013

Мой личный подход к изображениям Blobs заключается в использовании php-файла для обслуживания изображения в сочетании с аргументом GET ... Это на 100% эффективно и не требует создания файла ... Например, файл для обслуживания изображение из BLOB-объекта будет:

image.php:

<?php
$db = new PDO('mysql:host=localhost;dbname=anything; charset=utf8', 'account','password');
if (isset($_GET['imageid'])) {
    $result = $db->prepare("SELECT image FROM image where imageid = ?");
    if ($result->execute(array($_GET['imageid']))) {
        $row=$result->fetch();
        echo $row['pic']; //this prints the image data, transforming the image.php to an image
        }
    } // you can put an "else" here to do something on error...
?>

Это можно вызвать из основного сценария ... Например:

<?php
$db = new PDO('mysql:host=localhost;dbname=anything; charset=utf8', 'account','password');
//... some code to do your job, where you get your imageid from
$imageid=...
?>
<img src="./image.php?imageid=<?php echo $imageid;?>">
0 голосов
/ 21 февраля 2013

Этот код отображает все изображения в базе данных, так что вы можете изменить его и заставить делать то, что вы хотите

GetMessage (); } ?>
<?php 
#the folder where the images are saved 
$target = "image_uploads/";
$image_name = (isset($_POST['image_name']));

$query = ("SELECT user_id ,image_name FROM tish_images");
$image_show= $con-> prepare($query);
$image_show->execute();
while($record =$image_show->fetch(PDO::FETCH_ASSOC)) {
#this is the Tannery  operator to replace a pic when an id do not have one
$photo = ($record['image_name']== null)? "me.png":$record['image_name'];
#display image 
echo '<img src="'.$target.$photo.'">';
echo $record['user_id'];
}
?>
0 голосов
/ 13 июля 2012

Вы можете использовать этот код для получения изображения из базы данных, используя PDO:

public function getImage($id){
    $sql = "SELECT * FROM images WHERE id = ?";
    $sth = $this->dbh->prepare($sql);

    $sth->bindParam(1,$id);
    $sth->execute();


    $num = $sth->rowCount();
    if( $num ){
        $row = $sth->fetch(PDO::FETCH_ASSOC);
        header("Content-type: ".$row['type']);
        print $row['image'];
        exit;
    }else{
        return null;
    }
}

type - data type(column name), например, image / png или image / gifimage - image data(column name) хранится в таблице как LOB$this->dbh обработчик соединенияЭто работает для меня, но теперь мне нужно выяснить, как использовать его с JS, потому что результат этой функции передается в код JavaScript - так называемый ajax

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...