我无法弄清楚为什么我的图片没有显示在index.php
页面上。
我使用PDO来连接和使用数据库,但是我遇到了一些以前从未发生过的怪异问题。我以 blob 类型存储在数据库中的图像未显示在我的index.php
页面上。
这是我的代码:
<?php
$dsn = 'mysql:host=localhost;dbname=website;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', '');
if ( isset($_POST['upload']) )
{
$file = addslashes(file_get_contents($_FILES['image']['tmp_name']));
if ( !empty($file) )
{
$sql = " INSERT INTO images(name) VALUES (:name) ";
$pdo->prepare($sql)->execute(array('name' => $file));
}
}
?>
这是我用来在图像 div标签上显示图像的方法:
<div class="images" id="Images">
<?php
$sql = " SELECT * FROM images ";
$result = $pdo->query($sql);
if ( $result->rowCount() > 0 )
{
while ( $row = $result->fetch() )
{
echo '<img src="data:image/jpeg;charset=utf-8;base64,' .base64_encode($row['name']). '" alt="Binary Image"/>';
}
}
?>
</div>
答案 0 :(得分:1)
我将直接编码的图像存储在base64中,还有它的扩展名,以便正确显示。
重要
content
字段必须是数据库中的TEXT类型,否则您将无法正确存储数据,也将无法获取数据
<?php
$dsn = 'mysql:host=localhost;dbname=website;charset=utf8mb4';
$pdo = new PDO($dsn, 'root', '');
if (isset($_POST['upload'])) {
// Get the image and convert into string
$img = file_get_contents($_FILES['image']['tmp_name']);
// Encode the image string data into base64
$content = base64_encode($img);
// Get the extension
$extension = strtolower(end(explode('.', $_FILES['image']['name'])));
if (!empty($content)) {
$sql = " INSERT INTO images(content, extension) VALUES (:content, :extension) ";
$pdo->prepare($sql)->execute(array('content' => $content, 'extension' => $extension));
}
}
// Later in your code
?>
<div class="images" id="Images"></div>
<?php
$sql = " SELECT * FROM images ";
$result = $pdo->query($sql);
if ($result->rowCount() > 0) {
while ($row = $result->fetch()) {
echo "<img src='data:image/{$row['extension']};charset=utf-8;base64,{$row['content']}' alt='Binary Image'/>";
}
}
?>
</div>