Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将图像上载到数据库(php)_Php_Mysql - Fatal编程技术网

将图像上载到数据库(php)

将图像上载到数据库(php),php,mysql,Php,Mysql,我创建了简单的html和php来将图像(长blob类型)上传到数据库并显示它。我尝试了不同的代码来实现,但没有成功。 这段代码有相同的想法,但图像没有上传到数据库中,但当我使用“echo”打印名称和内容时,它打印出来了。此外,代码中断图像的结果。 我真的不知道问题出在哪里 upload.php <form action="upload.php" method="POST" enctype="multipart/form-data" > <label for="file

我创建了简单的html和php来将图像(长blob类型)上传到数据库并显示它。我尝试了不同的代码来实现,但没有成功。
这段代码有相同的想法,但图像没有上传到数据库中,但当我使用“echo”打印名称和内容时,它打印出来了。此外,代码中断图像的结果。
我真的不知道问题出在哪里

upload.php

<form action="upload.php" method="POST" enctype="multipart/form-data"   >
  <label  for="file">Filename:</label>
  <input type="file" name="image" id="image"><br>
  <input type="submit" name="submit" value="Upload">
</form>

<?php
if(isset($_POST['submit']))
{
  mysql_connect("127.0.0.1","root","")or die(mysql_error());
  mysql_select_db("databaseimage") or die(mysql_error());
  $image= mysql_real_escape_string( file_get_contents($_FILES["image"]["tmp_name"]));
  $image_name= mysql_real_escape_string($_FILES["image"]["name"]);

  $image_type= mysql_real_escape_string($_FILES["image"]["type"]);
  $image_size= $_FILES["image"]["size"];

  if(substr($image_type,0,5)=="image")
  {
    mysql_query("INSERT INTO 'store' VALUSE ('','$image_name','$image')");
    echo "Image Uploaded";
    $lastid= mysql_insert_id();
    echo "Image Uploaded. </p> Your Image: </p> <img src=\"get.php?id=$lastid\"/>";
  }
}
?>
<?php
mysql_connect("127.0.0.1","root","")or die(mysql_error());
mysql_select_db("databaseimage") or die(mysql_error());
if (isset($_GET['id']))
{
  $id= mysql_real_escape_string( $_GET['id']);
  $query=mysql_query("SELECT * FROM 'store' WHERE 'id'='$id'");
  while( $raw=mysql_fetch_assoc($query))
  {
    $imageData=$raw["image"];
  }
  header("Content-type: image/jpeg");
  echo $imageData;
}
else
{
  echo "Error!...";
}
?>

文件名:


更改为`:

upload.php

mysql_query("INSERT INTO `store` VALUES ('','$image_name','$image')");
get.php

$query=mysql_query("SELECT * FROM `store` WHERE `id`='$id'");

mysql.*函数从PHP 5.5.0开始就被弃用,不建议编写新代码,因为它将在将来被删除。相反,应该使用或扩展名。

mysql\u real\u escape\u string转义大量字符,这些字符很可能会损坏图像中的数据

如果您害怕SQL注入,您可以尝试使用类似b64的代码对其进行编码,而不是尝试逃避它(或者更好的是,将编码与类似PDO的代码结合起来)

存储图像:

$image = base64_encode(file_get_contents($_FILES["image"]["tmp_name"]));
检索编码图像:

<?php
// decode the image
$imageData = base64_decode($raw["image"]);

// get the file extension
$filename = basename($raw["name"]);
$file_extension = strtolower(substr(strrchr($filename,"."),1));

// set the appropriate content header
switch( $file_extension ) {
    case "gif": $ctype="image/gif"; break;
    case "png": $ctype="image/png"; break;
    case "jpeg":
    case "jpg": $ctype="image/jpg"; break;
    default:
}

header('Content-type: ' . $ctype);

echo $imageData;
?>


应该尝试通过一些调试来隔离您的问题。一个问题是,在您的sql语句中,“VALUSE”应该是“VALUES”,您可能更容易将其用于PDO。至少,您不会针对不推荐使用的API编写新代码。@Dalal解决了您的问题?