В предыдущей статье мы говорили о работе с полями типа 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/>";
}
?>

