为什么上传的图像不存储在数据库中?

时间:2016-11-24 10:42:54

标签: php mysql

我正在尝试将图像存储在我的mysql数据库中。我知道这可能不是最聪明的事情,但这项工作需要它。我已经在线查看了如何使用PHP代码存储图像,但每次我尝试遵循指南时,似乎会出现一个随机问题。现在使用此代码,我已设法获取存储在数据库中的所有信息,但图像和图像名称除外。有关如何使其工作的任何建议?

 $connect = mysqli_connect("host", "user", "pass", "dbname");  
 if(!empty($_POST))  
 {  
      $output = '';  
      $title = mysqli_real_escape_string($connect, $_POST["title"]);  
      $image = addslashes($_FILES['image']['tmp_name']);
      $name = addslashes($_FILES['image']['name']);
      $image = file_get_contents($image);
      $image = base64_encode($image);
      $text2 = mysqli_real_escape_string($connect, $_POST["text2"]);  
      $text1 = mysqli_real_escape_string($connect, $_POST["text1"]);       
      $dtime = date('Y-m-d H:i:s'); 
      $query = "  
      INSERT INTO news(title, image, name, text2, text1, dtime)  
      VALUES('$title', '{$image}', '$name', '$text2', '$text1', '$dtime');  
      ";  

我尝试了不同的选项,将$ connect添加到$ image和$ name以使其像其余部分一样或将addslashes更改为mysql_real_escape_string。

如果你有时间我会很感激,我需要一些帮助才能让它发挥作用!

1 个答案:

答案 0 :(得分:0)

这可能是因为您在读取文件之前在文件路径中添加了斜杠。

<?php
$connect = mysqli_connect("host", "user", "pass", "dbname");  
 if(!empty($_POST))  
 {  
      $output = '';  
      $title = mysqli_real_escape_string($connect, $_POST["title"]);

      // Replace below two lines...
      //   $image = addslashes($_FILES['image']['tmp_name']);
      //   $image = file_get_contents($image);
      // With:
      $image = file_get_contents($_FILES['image']['tmp_name']);
      $name = addslashes($_FILES['image']['name']);
      $image = base64_encode($image);
      $text2 = mysqli_real_escape_string($connect, $_POST["text2"]);  
      $text1 = mysqli_real_escape_string($connect, $_POST["text1"]);       
      $dtime = date('Y-m-d H:i:s'); 
      $query = "  
      INSERT INTO news(title, image, name, text2, text1, dtime)  
      VALUES('$title', '{$image}', '$name', '$text2', '$text1', '$dtime');  
      ";  

此外,您可能不希望在数据库中存储base64_encoded文件,因为它会增加存储大小(Base64: What is the worst possible increase in space usage?)。将图像存储为数据库中的blob(=二进制数据)。

考虑到这对您不起作用,请尝试以下方法进行调试:

<?php
// Print out the submitted files and the data.
var_dump($_FILES);
// Check to see if it's not empty, whether the submitted filename is actually "image", 


echo (file_exists($_FILES['image']['tmp_name']) ? 'File exists!' : 'File does not exist'), PHP_EOL;

echo (is_readable($_FILES['image']['tmp_name']) ? 'Can read the file!' : 'Can not read the file'), PHP_EOL;

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

echo 'File size: ', strlen($file), ' bytes (base64: ', strlen(base64_encode($file)), ' bytes)';

尝试一下,看看是否有任何异常......