从PHP脚本上载图像到MySQL

时间:2017-09-20 14:46:51

标签: php mysql file-upload

作为标题我试图使用PHP在DB Mysql上传图像: 以下是脚本:(我知道我应该使用mysqli ...)

HTML格式:

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <meta name="generator" content="AlterVista - Editor HTML"/>
  <title> Carica un'immagine </title>
</head>
<body>

<form enctype="multipart/form-data" action="upload.php" method="POST">
  <input type="hidden" name="MAX_FILE_SIZE" value="3000000">
  Invia questo elemento: <input name="userfile" type="file"></br>
  <input type="submit" value="Carica">
</form>

</body>
</html>

PHP脚本:

<?php
    //Connect to DB
    $conn = mysql_connect('localhost', 'realegr', 'pass', 'my_realegr');
    if (!$conn){
        die("Could Not Connect to MySQL!");
    }
    if(!mysql_select_db("my_realegr")){
        die("Could Not Open Database:" . mysql_error());
    }
    //file properties
    $file = $_FILES['userfile']['tmp_name'];

    if (!isset($file)){
      echo "<p>Please Select an Image</p>";
    } else {
      $image = mysql_real_escape_string(file_get_contents($_FILES['userfile']['tmp_name']));
      $image_name = mysql_real_escape_string($_FILES['userfile']['name']);
      $image_size = getimagesize($_FILES['userfile']['tmp_name']);

      if ($image_size==FALSE) {
        echo "<p>NOT AN IMAGE</p>";
      } else {
        echo "<p>File is an Image. Processing...</p>";
        if(!$insert = mysql_query("INSERT INTO images (name, image) VALUES ('$image_name','$image')")){
          echo ("<p>Error Uploading Image: " . mysql_error() . "</p>");
        } else {
          $lastid = mysql_insert_id();
          echo "<p>Success!</p>";
          echo "<img src=get.php?id=$lastid>";
        }
      }
    }
    ?>

显然还有另一个php脚本(get.php),但问题出在这个问题上。 我得到的错误是这样的: 文件是图像。处理...

  

错误上传图片:第1行的列'图片'的数据太长

我无法理解原因......(图像仅为70 kb)

(这是我的表: id int主键Auto_increment name varchar(50) 图像blob )

2 个答案:

答案 0 :(得分:1)

不要将图像数据保存在数据库中。没有必要,甚至可能导致您的网站运行得更慢!

相反,请将其保存到使用move_uploaded_file() http://php.net/manual/en/function.move-uploaded-file.php

无法公开访问的上传文件夹中

执行此操作后,将路径存储到数据库中的文件中!

答案 1 :(得分:-2)

目前你有这一行:"INSERT INTO images (name, image) VALUES ('$image_name','$image')"。如果您尝试将其更改为以下内容,该怎么办?

<?php
    // NOTICE THE "LOAD_FILE"
    // WHERE $fileToLoad IS THE PATH TO THE UPLOADED IMAGE-FILE 
    "INSERT INTO images (name, image) 
    VALUES('$image_name', LOAD_FILE({$fileToLoad}))";

但是,根据经验将图像存储在数据库中始终不是最好的选择...考虑将图像存储在专用文件夹中,只需保存数据库中的地址....