php将图片保存入mysql数据库失败的解决方法

当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技术站

(0)
上一篇 2023年5月18日
下一篇 2023年5月18日

相关文章

  • ubuntu下mysql二进制包安装教程

    下面就是“ubuntu下mysql二进制包安装教程”的完整攻略: 准备 下载MySQL的二进制包,可以去官网下载最新的版本 https://dev.mysql.com/downloads/mysql/ 确认系统是否已经安装了 libaio1 和 libnuma1,如果没有安装可以使用以下命令进行安装: sudo apt-get update sudo apt…

    database 2023年5月22日
    00
  • vue实现下拉框二级联动效果的实例代码

    下面是详细讲解「Vue实现下拉框二级联动效果的实例代码」的完整攻略。本攻略分为以下四个部分: 前置知识 实现思路 示范代码 总结 1. 前置知识 在学习本攻略之前,你需要知道以下知识: Vue.js框架的基础使用 Vue组件和父子组件之间的通信 Vue的computed属性 如果对上述知识不熟悉,可以先去学习相关的知识。 2. 实现思路 下拉框的二级联动效果…

    database 2023年5月22日
    00
  • mysql优化之like和=性能详析

    下面是关于“mysql优化之like和=性能详析”的详细攻略。 1. 为什么要优化like和=查询 在MySQL中,like和=是常见的查询方式,但是在大数据量下,它们的查询速度可能会变得相对较慢,尤其是like查询,因为like查询需要做全表扫描,而=查询可以利用索引进行优化。因此,在使用like和=查询时,我们需要针对具体情况进行性能优化,以增加查询速度…

    database 2023年5月19日
    00
  • SVN报错:Error Updating changes:svn:E155037的解决方案

    针对这个问题,我可以如下详细讲解解决方案的完整攻略: 问题描述 首先,我们来看一下这个问题的具体描述:当我们在使用SVN(Subversion)进行代码管理、版本控制时,有时候在提交或更新代码时可能会遇到如下的错误提示: Error Updating changes: svn:E155037: Previous operation has not finis…

    database 2023年5月18日
    00
  • MySQL DELETE:删除数据详解

    MySQL DELETE是用于删除已存在的数据行的命令。该命令会从表中删除指定的数据行。它具有以下语法: DELETE FROM tablename WHERE condition 其中,tablename是要删除数据行的表名;condition是删除的条件语句。如果不提供条件,则将删除表中所有数据行。 下面是一个MySQL DELETE 的实例,假设我们有…

    MySQL 2023年3月9日
    00
  • Oracle 查看表空间的大小及使用情况sql语句

    要查看 Oracle 数据库中表空间的大小及使用情况,可以使用 SQL 语句来实现。以下是完整的攻略: 1. 查看整个数据库中表空间的大小及使用情况 可以使用以下 SQL 语句来查看整个数据库中表空间的大小及使用情况: SELECT tablespace_name, ROUND(SUM(bytes) / (1024 * 1024), 2) AS total_…

    database 2023年5月21日
    00
  • MySQL循环语句实例教程 mysql while循环测试

    在mysql数据库中操作同样有循环语句操作,标准的循环方式: while 循环 、 loop 循环和repeat循环。还有一种非标准的循环: goto。 鉴于goto 语句的跳跃性会造成使用的的思维混乱,所以不建议使用。 这几个循环语句的格式如下:WHILE……DO……END WHILEREPEAT……UNTIL END REPEATLOOP……END LO…

    MySQL 2023年4月13日
    00
  • docker安装redis 5.0.7并挂载外部配置和数据问题

    请按照以下步骤进行操作: 1. 安装Docker 首先,需要在系统中安装Docker,以下是在Ubuntu系统下安装的命令: sudo apt-get update && \ sudo apt-get install apt-transport-https ca-certificates curl gnupg-agent software-p…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部