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日

相关文章

  • msyql5.6与mysql5.7安装区别

    mysql 5.7安装tar xf mysql-5.7.17-linux-glibc2.5-x86_64.tar.gz mv mysql-5.7.17-linux-glibc2.5-x86_64 /opt/mysql yum install -y compat-libstdc++-33 libaio libaio-devel useradd -M -s /s…

    MySQL 2023年4月12日
    00
  • 如何使用Python在MySQL中使用游标?

    当使用Python与MySQL交互时,可以使用游标来执行SQL语句并处理结果。游标是一种用于在MySQL中检索和操作数据的机制。以下是使用Python在MySQL中使用游标的完整攻略,包括创建游标、使用游标和删除游标等步骤。同时,还提供了两个示例来演示如何在Python中使用MySQL游标。 创建游标 在Python中使用MySQL游标之前,需要先创建游标。…

    python 2023年5月12日
    00
  • 如何使用Python删除数据库中的数据?

    当需要从数据库中删除数据时,可以使用Python连接到数据库并执行SQL删除语句。以下是使用Python删除数据库中的数据的完整攻略: 连接数据库 要连接到数据库,需要提供数据库的主机名、用户名、和数据库名称。可以使用以下代码连接MySQL: import mysql.connector mydb = mysql.connector.connect( hos…

    python 2023年5月12日
    00
  • Windows下搭建Redis服务器图文教程

    下面是对于“Windows下搭建Redis服务器图文教程”的完整攻略: Step 1: 下载Redis 在Redis官网上下载最新的Redis压缩包,解压到某个目录,并进入目录。 Step 2: 启动Redis 在Redis目录下,运行redis-server.exe文件,启动Redis服务端。 Step 3: 测试Redis 在Redis目录下,运行red…

    database 2023年5月22日
    00
  • DBMS中的OLAP与OLTP区别

    1. OLAP和OLTP的概念及特点 1.1 OLAP概念及特点 OLAP(Online Analytical Processing)中文翻译为在线分析处理。它是一种数据分析技术,能够快速地对大型、复杂、多维数据进行查询、分析和统计,为企业决策提供数据支持。OLAP系统具有以下特点: 面向主题:OLAP系统是面向企业的分析需求,针对分析任务进行构建和优化。 …

    database 2023年3月27日
    00
  • MySQL5.7慢查询日志时间与系统时间差8小时原因详解

    首先让我们来了解一下MySQL5.7慢查询日志时间与系统时间差8小时的原因。 在MySQL5.7中,慢查询日志时间戳是以UTC(世界协调时)时间保存的,而不是以本地时间保存。而系统的时间戳是根据服务器所在时区的本地时间保存的。这就导致了慢查询日志时间与系统时间相差8个小时(如果服务器所在的时区是中国北京,则相差为8小时)。 那么,如何解决这个问题呢?我们可以…

    database 2023年5月22日
    00
  • SQL Server触发器和事务用法示例

    针对SQL Server触发器和事务的用法示例,下面的攻略将分为两部分进行说明。 触发器 在SQL Server中,触发器(trigger)是一种特殊的存储过程,可以在特定的数据操作(insert、update、delete等)发生时自动执行。触发器通常应用于数据的审计、约束、业务逻辑处理等场景。 创建触发器 在SQL Server中创建触发器一般需要指定以…

    database 2023年5月21日
    00
  • MySQL中聚合函数count的使用和性能优化技巧

    MySQL中聚合函数是对一组数据进行统计分析的函数。其中,count函数是用来统计行数的函数,本文将会详细讲解count函数的使用和性能优化技巧。 什么是count函数 在MySQL中,count函数是用来统计某一列或者某个表的总行数的。其语法如下所示: SELECT COUNT(column_name) FROM table_name; 这里 column…

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