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