我试图使用php将其路径中的图像插入mysql数据库中,但我做到了,但是当我需要从mysql数据库中将图像检索到标签中时,该图像没有出现。
我的数据库
CREATE TABLE IF NOT EXISTS `tbl_images` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` blob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
index.php
<?php
$connect = mysqli_connect("localhost", "root", "", "test");
if(isset($_POST["insert"]))
{
$path='C:\\xampp\\htdocs\\test_img\\4.jpg';
$query = "INSERT INTO tbl_images(name) VALUES ('LOAD_FILE($path)')";
if(mysqli_query($connect, $query))
{
echo '<script>alert("Image Inserted into Database")</script>';
}
}
?>
<!DOCTYPE html>
<html>
<head>
</head>
<body>
<form method="post" enctype="multipart/form-data">
<input type="submit" name="insert" id="insert" value="Insert" />
</form>
<table >
<?php
$query = "SELECT * FROM tbl_images ";
$result = mysqli_query($connect, $query);
while($row = mysqli_fetch_array($result)) {
echo '
<tr>
<td> <img src="data:image/jpeg;base64,'.base64_encode($row['name'] ).'" height="200" width="200" /> </td>
</tr>
';
}
?>
</table>
</body>
</html>
编辑:插入无法正常工作。它将插入字符串LOAD_FILE(C:xampphtdocs est_img4.jpg)而不是图像本身。
答案 0 :(得分:4)
BLOB
columns仅能存储64KB的数据,因此任何最大的图像都会被截断并且无法显示。
如果要将它们存储在数据库中,则需要使用LONGBLOB
。
除非文件与MySQL服务器进程位于同一服务器上,否则您也不能使用LOAD_FILE
进行插入。这并非总是如此。如果存在,那么您应该这样做:
$stmt = $connect->prepare("INSERT INTO tbl_images(name) VALUES (LOAD_FILE(?))");
$stmt->bind_param('s', $path);
$stmt->execute();
引用 path 的地方,而不是LOAD_FILE
调用本身。您要插入纯字符串,并且文字"LOAD_FILE(...)"
无效的图像数据。
请记住,将图像存储在数据库中通常是bad idea。而是存储对图像的引用,例如文件路径或对象存储库的URL。
您还将图像作为嵌入式data:base64
数据提供,这效率极低。它不仅使传输图像所需的数据量增加了约33%,而且还意味着图像必须在每次页面加载时发送,并且无法缓存。对于移动用户,这将快速刻录数据。