Я рефакторинг старого кода, включая переписывание базовых запросов 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 отлично работает для всех других запросов всех типов.
Вам необходимо параметризовать значение 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).
Мой персональный подход к Image 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;?>">
Вы можете использовать этот код для получения изображения из базы данных с помощью 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 / gif
image - image data(column name)
хранящиеся в таблице как LOB
$this->dbh
обработчик соединения
Он работает для меня, но теперь мне нужно выяснить, как использовать его с JS, потому что результат этой функции передается в код JavaScript – так называемый ajax
Этот код отображает все изображения в dabase, поэтому вы можете изменить его и заставить его делать то, что вы хотите, чтобы он делал
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']; } ?>