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

yizhihongxing

当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日

相关文章

  • Linux系统下Oracle数据库的安装和启动关闭操作教程

    Linux系统下Oracle数据库的安装和启动关闭操作教程 简介 Oracle数据库是世界上最流行的关系型数据库管理系统之一,它拥有丰富的功能和高性能的架构,被广泛应用于企业级应用开发中。本教程将介绍如何在Linux系统下安装和启动/关闭Oracle数据库。 系统要求 在进行Oracle数据库的安装之前,您需要准备好以下系统要求: Linux操作系统(Cen…

    database 2023年5月22日
    00
  • Oracle Translate 统计字符出现的次数示例代码

    下面是“Oracle Translate 统计字符出现的次数示例代码”的详细攻略: 1. 前置准备 在进行代码示例之前,需要准备以下工作: 安装 Oracle 数据库,并确认可以连接到该数据库; 创建一个新表格,用于存储统计结果; 准备一些需要进行统计的字符串(可使用随机字符串生成工具)。 2. 示例代码 DECLARE str VARCHAR2(50); …

    database 2023年5月21日
    00
  • Sql Server 索引使用情况及优化的相关Sql语句分享

    我来为您详细讲解一下“Sql Server 索引使用情况及优化的相关Sql语句分享”的攻略。 一、索引使用情况的查看 1.1 查看表索引的使用情况 使用以下命令可以查看表的索引使用情况: SELECT OBJECT_NAME(s.[object_id]) AS [Object Name], i.name AS [Index Name], s.user_see…

    database 2023年5月21日
    00
  • MySql 之UUID()

    mysql中做了个定时执行的事件,发现原来起作用,现在不行了。 调用/var/lib/mysql中的错误日志文件,发现一句: Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsaf…

    MySQL 2023年4月12日
    00
  • Java程序员新手老手常用的八大开发工具

    Java程序员新手老手常用的八大开发工具 作为Java程序员,对于开发工具的选择和使用显得尤为重要。下面介绍Java程序员新手到老手常用的八大开发工具,帮助程序员高效、快速地完成开发工作。 1. Eclipse Eclipse是开发Java应用程序最流行的集成开发环境(IDE),它具有丰富的插件、工具链和快捷键。它支持多种编程语言,包括Java,C++,PH…

    database 2023年5月21日
    00
  • Ubuntu服务器下搭建php运行环境的方法

    下面我会详细讲解在Ubuntu服务器下搭建php运行环境的方法,包含以下几个步骤: 安装Apache Apache是一款开源的Web服务器软件,用于向客户端提供网页服务,可以在Ubuntu服务器上通过以下命令进行安装: sudo apt-get update sudo apt-get install apache2 安装PHP和相关插件 PHP是一款开源的脚…

    database 2023年5月22日
    00
  • MySQL回表的性能伤害程度有多大

    MySQL回表指的是当查询语句需要访问的列不在索引中时,MySQL需要通过回表的方式去访问数据页,从而得到完整的记录信息。回表的这个过程会导致额外的磁盘I/O和内存消耗,对查询性能有很大的影响。 下面是一些可以减少MySQL回表性能损失的建议: 覆盖索引 覆盖索引指的是在查询语句中只查询索引列,而不需要回表获取数据行。这样可以避免回表操作,从而提高查询性能。…

    database 2023年5月22日
    00
  • SQL 插入默认值

    当我们向数据库表中插入新记录时,有时候可能只想指定一些字段的具体值,而其它字段的值可以使用默认值。在SQL中,可以通过 INSERT INTO 语句中的 VALUES 关键字或者 INSERT INTO … SET 语句中的 DEFAULT 关键字来设置默认值。 下面,我将为大家提供详细的SQL插入默认值的攻略,包括两个实例。 表格结构 users 表格…

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