【问题标题】:How to upload images into MySQL database using PHP code如何使用 PHP 代码将图像上传到 MySQL 数据库
【发布时间】:2013-07-17 01:14:48
【问题描述】:

我正在尝试将图像从 HTML 表单保存到我的数据库中。我已经编写了 PHP 代码来完成这项任务。该程序没有生成任何错误消息,也没有在 MySQL 数据库中插入图像数据。请检查一下。 在这里,我将分享我的代码的摘录。

        /*-------------------
    IMAGE QUERY 
    ---------------*/


    $file   =$_FILES['image']['tmp_name'];
    if(!isset($file))
    {
      echo 'Please select an Image';
    }
    else 
    {
       $image_check = getimagesize($_FILES['image']['tmp_name']);
       if($image_check==false)
       {
        echo 'Not a Valid Image';
       }
       else
       {
        $image = file_get_contents ($_FILES['image']['tmp_name']);
        $image_name = $_FILES['image']['name'];
        if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
        {
          echo $current_id;
         //echo 'Successfull';
        }
        else
        {
          echo mysql_error();
        }
       }
   }
        /*-----------------
    IMAGE QUERY END
    ---------------------*/

    <form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
            File        : <input type='file' name= 'image' >
    </form>

错误信息 您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 第 1 行的 '' 附近

【问题讨论】:

  • 您可以将图片的base64存储在数据库中,也可以存储在服务器上的路径中。
  • 不要将图像保存到数据库中,除非它是您应用程序的核心部分。

标签: php html mysql database image-uploading


【解决方案1】:

首先,您应该检查您的图片列是否为 BLOB 类型

我对你的 SQL 表一无所知,但如果我会尝试制作自己的作为示例。

我们有字段 id (int)、image (blob) 和 image_name (varchar(64)) .

所以代码应该如下所示(假设 ID 始终为 '1',让我们使用这个 mysql_query):

$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
    echo "Something went wrong! :("; 
}

你在很多方面都做错了。不要使用 mysql 函数 - 它们已被弃用!使用PDOMySQLi。您还应该考虑将文件位置存储在磁盘上。使用 MySQL 存储图像被认为是 Bad Idea™。处理带有大数据(如图像)的 SQL 表可能会出现问题。

您的 HTML 表单也不符合标准。它应该是这样的:

<form action="insert_product.php" method="POST" enctype="multipart/form-data">
    <label>File: </label><input type="file" name="image" />
    <input type="submit" />
</form>

旁注:

在处理文件并将其存储为 BLOB 时,必须使用mysql_real_escape_string() 对数据进行转义,否则会导致语法错误。

【讨论】:

  • 它不工作。未定义的变量:_FILE 和 file_get_contents():文件名不能为空正在显示
  • @SANDEEP:我修好了。
  • 为了避免 SQL 注入,我会使用 mysqli_real_escape_string 或等效项而不是添加斜杠。最好的方法是使用 PDO 准备好的语句。
  • 我是从今天提出的另一个问题中提出这个问答的。在处理文件并以BLOB 存储时,数据必须使用mysql_real_escape_string() 进行转义,否则导致语法错误。这不仅仅是“为了安全”,而是因为必须这样做。
  • @Fred-ii- - 您可以编辑我的帖子以包含该修复。就像我回答这个问题的时候一样。
【解决方案2】:

还有一些细节

  • 添加mysql字段

`image` blob

  • 从图像中获取数据

$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));

  • 将图像数据插入数据库

$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";

  • 在网上显示图片

<img src="data:image/png;base64,'.base64_encode($row['image']).'">

  • 结束

【讨论】:

  • 应该是 $_FILES *
  • 应该是 longblob 或 mediumblob。 “blob”仅存储 64k 信息。我通过剪掉一半的图像了解到这一点
【解决方案3】:

这是通过 MySQL 数据库上传和显示图像的完美代码。

<html>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image"/>
<input type="submit" name="submit" value="Upload"/>
</form>
<?php
    if(isset($_POST['submit']))
    {
     if(getimagesize($_FILES['image']['tmp_name'])==FALSE)
     {
        echo " error ";
     }
     else
     {
        $image = $_FILES['image']['tmp_name'];
        $image = addslashes(file_get_contents($image));
        saveimage($image);
     }
    }
    function saveimage($image)
    {
        $dbcon=mysqli_connect('localhost','root','','dbname');
        $qry="insert into tablename (name) values ('$image')";
        $result=mysqli_query($dbcon,$qry);
        if($result)
        {
            echo " <br/>Image uploaded.";
            header('location:urlofpage.php');
        }
        else
        {
            echo " error ";
        }
    }
?>
</body>
</html>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 2015-01-01
    • 1970-01-01
    • 2011-04-21
    • 2015-09-18
    • 2016-05-26
    • 2019-10-30
    相关资源
    最近更新 更多