当PHP将图片保存到MySQL数据库中时,可能会遇到许多问题,比如无法将图像文件成功保存在数据库中,图像无法正确显示等等。下面是将图片保存到MySQL数据库中的解决方案。
确认表结构
首先确认表结构,确保创建的存储图像的表存在正确的列,可以使用以下代码创建一个包含正确列的表:
CREATE TABLE `images` (
`id` INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(100) NOT NULL,
`type` VARCHAR(20) NOT NULL,
`data` MEDIUMBLOB NOT NULL,
`created_at` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=INNODB DEFAULT CHARSET=utf8;
确认上传文件的大小
通常,MySQL中存储BLOB对象大小的最大值为65535个字节(就是 64 KB)。可以在my.cnf文件中进行更改,但这需要重启MySQL服务器才能生效。如果要存储大于此大小的图像,可以使用文件系统或云存储代替BLOB列。
编写正确的代码
在PHP代码中,应该使用base64_encode()将图像数据转换为base64编码,并使用addslashes()转义字符。下面是一个保存图像到MySQL数据库中的代码示例:
$imgData = addslashes(base64_encode(file_get_contents($_FILES['image']['tmp_name'])));
$imageProperties = getimageSize($_FILES['image']['tmp_name']);
$extension = $imageProperties['mime'];
$insert_query = "INSERT INTO images (`name`,`type`,`data`) VALUES ('$name', '$extension', '$imgData')";
示例1
以下是一个实际的示例,演示如何将图像上传到MySQL数据库中。首先,让我们创建一个HTML表单来收集图像数据:
<form method="post" enctype="multipart/form-data" action="upload.php">
<label for="name">Image Name</label>
<input type="text" name="name" required>
<label for="image">Select Image</label>
<input type="file" name="image" accept="image/*" required>
<button type="submit" name="submit">Upload</button>
</form>
然后,创建上传文件的PHP脚本upload.php:
<?php
// Check if form was submitted
if($_SERVER['REQUEST_METHOD'] == 'POST') {
$name = $_POST['name'];
// Get image data from file
$imgData = addslashes(base64_encode(file_get_contents($_FILES['image']['tmp_name'])));
$imageProperties = getimageSize($_FILES['image']['tmp_name']);
$extension = $imageProperties['mime'];
// Add to database
$query = "INSERT INTO images (`name`,`type`,`data`) VALUES ('$name', '$extension', '$imgData')";
mysqli_query($conn, $query);
}
?>
示例2
下面这个示例演示如何从数据库中检索图像并在浏览器中显示它。首先,查询数据库并获取数据:
<?php
$query = "SELECT * FROM `images`";
$result = mysqli_query($conn, $query) or die('Error, query failed');
if(mysqli_num_rows($result) == 0) {
echo "Database is empty <br>";
} else {
while($row = mysqli_fetch_array($result)) {
echo "<img src='data:" . $row['type'] . ";base64," . $row['data'] . "' />";
}
}
?>
这将在浏览器中显示数据库中包含的所有图像文件。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php将图片保存入mysql数据库失败的解决方法 - Python技术站