【问题标题】:Uploading image into MySQL from PHP script从 PHP 脚本将图像上传到 MySQL
【发布时间】:2017-09-20 14:46:51
【问题描述】:

作为标题,我正在尝试使用 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 名称 varchar(50) 图像块 )

【问题讨论】:

  • 使用LONGBLOB 而不是BLOB 作为表中的image
  • @RAUSHANKUMAR:但是,这样做并不是一个好习惯。更好的是,我们可以将图像/文件存储在一个目录中,并将路径保存在数据库列中。
  • $conn = mysql_connect('localhost', 'realegr', 'pass', 'my_realegr'); 这完全失败了。这不使用 4 个参数,而是 3 个。
  • @NanaPartykar 你的意思是把图片保存在网络服务器的目录吗?为什么会更好?

标签: php mysql file-upload


【解决方案1】:

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

相反,请将其保存到使用 move_uploaded_file() http://php.net/manual/en/function.move-uploaded-file.php 无法公开访问的上传文件夹中

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

【讨论】:

  • “抱歉,路径是这个 $_FILES['userfile']['tmp_name']??”。是的,在您使用move_uploaded_file() 之前,它会变成一个普通的文件路径,例如/var/www/site/data/uploads/photo.jpg,或其他。将其存储在 varchar 列中!
【解决方案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}))";

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

【讨论】:

  • 抱歉,路径是这个 $_FILES['userfile']['tmp_name']??
  • 您错过了 OP 不正确地使用 mysql_connect() 的事实。
猜你喜欢
  • 1970-01-01
  • 2018-08-26
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-04
  • 2016-03-29
  • 2020-10-10
相关资源
最近更新 更多