PDO: Альтернативы выборки из BLOB

В предыдущей статье мы говорили о работе с полями типа BLOB. Мы практиковали как вставлять и извлекать данные. Теперь, мы поговорим о альтернативном варианте извлечения данных.

В прошлой записи мы рассматривали следующий код:

// query
$sql = "SELECT id,title,author,cover FROM books";
$q = $conn->prepare($sql);
$q->execute();

$q->bindColumn(1, $id);
$q->bindColumn(2, $title);
$q->bindColumn(3, $author);
$q->bindColumn(4, $cover, PDO::PARAM_LOB);

while($q->fetch())
{
file_put_contents($id.".png",$cover);
echo "$title, $author, <img src='".$id.".png'> <br/>";
}

В строке 13 мы создаем файл. Содержание этого файла типа BLOB. Затем мы вызываем этот файл в строке 14. Таким образом, мы всегда можем создать файл «физически».

Альтернативным же способом является вызов «виртуального» файла на лету. Создайте файл с именем «cover.php»:

<?php
// configuration
$dbtype		= "sqlite";
$dbhost 	= "localhost";
$dbname		= "test";
$dbuser		= "root";
$dbpass		= "admin";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// query
$sql = "SELECT cover FROM books WHERE id=".$_GET['id'];
$q = $conn->prepare($sql);
$q->execute();

$q->bindColumn(1, $cover, PDO::PARAM_LOB);
$q->fetch(PDO::FETCH_BOUND);
header("Content-Type: image/png");
echo $cover;
?>

Эта страница показывает только изображение. Теперь мы обновляем извлечение данных:

<?php
// configuration
$dbtype		= "sqlite";
$dbhost 	= "localhost";
$dbname		= "test";
$dbuser		= "root";
$dbpass		= "admin";

// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);

// query
$sql = "SELECT id,title,author,cover FROM books";
$q = $conn->prepare($sql);
$q->execute();

$q->bindColumn(1, $id);
$q->bindColumn(2, $title);
$q->bindColumn(3, $author);
$q->bindColumn(4, $cover, PDO::PARAM_LOB);

while($q->fetch())
{
echo "$title, $author, <img src='cover.php?id=".$id."'> <br/>";
}

?>

 

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Этот сайт использует Akismet для борьбы со спамом. Узнайте как обрабатываются ваши данные комментариев.