尝试使用图像遍历测试数据库(我知道很多人说不要这样做,但它在备份等方面简化了很多)。我可以通过动态创建图像文件来获得我想要的结果,但必须有一种方法可以在不创建文件的情况下执行此操作。有人可以建议我可以使用的语法,而无需创建这些图像文件吗?
以下是我的工作:
<?php
// configuration
$dbhost = "localhost";
$dbname = "test";
$dbuser = "root";
$dbpass = "";
// database connection
$conn = new PDO("mysql:host=$dbhost;dbname=$dbname",$dbuser,$dbpass);
// query
$sql = "SELECT id,title,author,description,cover FROM books";
$q = $conn->prepare($sql);
$q->execute();
$q->bindColumn(1, $id);
$q->bindColumn(2, $title);
$q->bindColumn(3, $author);
$q->bindcolumn(4, $description);
$q->bindColumn(5, $cover, PDO::PARAM_LOB);
while($q->fetch())
{
file_put_contents($id.".png",$cover);
echo ("<img src='".$id.".png'><br />, $title, $author, $description,<br/>");
}
?>
我在想我们应该能够消除“file_put_contents ..”行并在echo行中替换
<img src='".$id.".png'>"
使用一些php / pdo语句检索blob并将其放入正确的格式。尝试了一些事情,但没有成功。
任何建议都会有所帮助!
答案 0 :(得分:-1)
您需要在2个文件中编写代码。当浏览器获得<img src="path/to img_file">
代码(或代码如<script src="....">
)等时,浏览器会在src路径值处向服务器发送单独的请求。所以,你还需要创建文件img_file。
伪代码在下面,
<强> Firstfile.php 强>
<?php
..................... Other code
while($q->fetch())
{
?>
<img src="image.php?id=<?php echo $id; ?>"><br />,
<?php
echo "$title, $author, $description<br/>";
}
?>
在 image.php 文件中,
header('Content-Type: image/png');
$id = $_GET['id'];
$query = " ..... where id = '".$_GET['id']."'";
//You need error handling if $_GET['id'] is integer and valid value. I am not writing this error handling code
if($q->row_count!=1){
//no database row found. It's error.
echo "Show no image found image. As browser expects image you can not write text here";
die;
}
//it's valid image, else code is already terminated by above die.
while($q->fetch())
{
//show image
echo $cover;
}
?>
我写的伪代码确切代码取决于要求。 如果你想要.png扩展名,你可以使用Apache重写。谷歌,你会得到它。 当我第一次写回答时,我错过了最后一个php结束标记。顺便说一句,最后结束标记?&gt; 在php中是可选的。 如果你得到X,似乎第一个文件代码是好的。由于imag_file不在服务器上,因此显示404错误。查看来源以检查 $ _ GET [&#39; id&#39;] 是否正确。如果id正确,那么你想写文件img_file.php
答案 1 :(得分:-1)
您不需要在2个单独的文件中执行此操作,并在img标记的src属性中调用脚本。
尝试这样做
echo '<img src="data:image/'.$type.';base64,'.base64_encode($image).'"/>';
其中$ type是图像的扩展名(.png / .jpeg / ....),$ image是您存储在数据库中的图像的二进制文件。在我的情况下,我从数据库中提取图像类型的值,如果你总是存储相同的扩展名(ex jpeg),你可以简单地写:
echo '<img src="data:image/jpeg;base64,'.base64_encode($image).'"/>';
该方法可以替代2个文件。