无法将图片上传到mysql数据库使用php

时间:2015-07-10 03:41:31

标签: php image upload

我正在尝试使用php5脚本将图像上传到MySQL数据库。我收到通知错误。

错误,查询失败

UploadImage.php



<?php
session_start();
?>

<HTML>
<HEAD>
<TITLE> Image Upload</TITLE>
</HEAD>
 
<BODY>
<FORM NAME="f1" METHOD="POST" ACTION="uploadImage2.php" ENCTYPE="multipart/form-data">
<table>
<tr><td> Image Upload Page </td></tr>
<tr><td> <input type="file" name="imgfile"/></td></tr>
<tr><td> <input type="submit" name="submit" value="Save"/> </td></tr>
</table>
</FORM>
</BODY>
</HTML>
&#13;
&#13;
&#13;

UploadImage2.php

&#13;
&#13;
<?php 
include "dbconfig.php";
 
$dbconn = mysql_connect($dbhost, $dbusr, $dbpass) or die("Error Occurred-".mysql_error());
mysql_select_db($dbname, $dbconn) or die("Unable to select database");
 
if(isset($_REQUEST['submit']) && $_FILES['imgfile']['size'] > 0)
{
		 $fileName   = mysql_real_escape_string($_FILES['imgfile']['name']); // image file name
		 $tmpName    = $_FILES['imgfile']['tmp_name']; // name of the temporary stored file name
		 $fileSize   = mysql_real_escape_string($_FILES['imgfile']['size']); // size of the uploaded file
		 $fileType   = mysql_real_escape_string($_FILES['imgfile']['type']); //
		
		
		 $fp   = fopen($tmpName, 'r'); // open a file handle of the temporary file
		 $imgContent  = fread($fp, filesize($tmpName)); // read the temp file
		 $imgContent  = mysql_real_escape_string($imgContent);
		 fclose($fp); // close the file handle
 
          $query = "INSERT INTO img_tbl (img_name, img_type, img_size, img_data )
                        VALUES ('$fileName', '$fileType', '$fileSize', '$imgContent')";
	          
          mysql_query($query) or die('Error, query failed'.mysql_errno($dbconn) . ": " . mysql_error($dbconn) . "\n");
          $imgid = mysql_insert_id(); // autoincrement id of the uploaded entry
          //mysql_close($dbconn);
 
          echo "<br>Image successfully uploaded to database<br>";
          echo "<a href=\"uploadImage2_viewimage.php?id=$imgid\">View Image</a>";
 
}else die("You have not selected any image");
?>
&#13;
&#13;
&#13;

我上传了一个图片文件,但仍然有错误。

但是现在我已经为视图图像反击了另一个错误。

&#13;
&#13;
<?php
// get the file with the id from database
include "dbconfig.php";
$dbconn = mysql_connect($dbhost, $dbusr, $dbpass) or die("Error Occurred-".mysql_error());
mysql_select_db($dbname, $dbconn) or die("Unable to select database");

if(isset($_REQUEST['id']))
{


	$id    = $_REQUEST ['id'];
	$query = "SELECT img_name, img_type, img_size, img_data FROM img_tbl WHERE id = ‘$id’";

	$result = mysql_query($query) or die(mysql_error());
	list($name, $type, $size, $content) = mysql_fetch_array($result);

	header("Content-length: $size");
	header("Content-type: $type");
	print $content;

	mysql_close($dbconn);
}
?>
&#13;
&#13;
&#13;

错误代码:

注意:第12行的C:\ xampp \ htdocs \ sandbox \ Testing \ uploadImage2_viewimage.php中的未定义变量:id�  您的SQL语法有错误;查看与您的MySQL服务器版本对应的手册,以获得正确的语法,以便在&#39;�&#39;附近使用。在第1行

请告知......

3 个答案:

答案 0 :(得分:0)

从查询中的表字段中删除''。使用此查询:

$query = "INSERT INTO img_tbl (img_name, img_type, img_size, img_data )
                            VALUES ('$fileName', '$fileType', '$fileSize', '$imgContent')";

也请开始使用PDO或mysqli,因为您的查询是为sql注入打开的

答案 1 :(得分:0)

这应该有效:

$query = "
INSERT INTO `img_tbl` 
(`img_name`, `img_type`, `img_size`, `img_data` )
VALUES
('".$fileName."', '".$fileType."', '".$fileSize."', '".$imgContent."')
";

答案 2 :(得分:0)

似乎$imgContent中的某些特殊字符打破了查询字符串

请在发送到数据库之前使用mysql_real_escape_string格式化数据

mysql_real_escape_string

 $fileName   = mysql_real_escape_string($_FILES['imgfile']['name']); // image file name
 $tmpName    = $_FILES['imgfile']['tmp_name']; // name of the temporary stored file name
 $fileSize   = mysql_real_escape_string($_FILES['imgfile']['size']); // size of the uploaded file
 $fileType   = mysql_real_escape_string($_FILES['imgfile']['type']); //


 $fp   = fopen($tmpName, 'r'); // open a file handle of the temporary file
 $imgContent  = fread($fp, filesize($tmpName)); // read the temp file
 $imgContent  = mysql_real_escape_string($imgContent);
 fclose($fp); // close the file handle 

<强>更新

如果第一个解决方案没有解决问题,请检查是否有任何NULL值,您有一些设置为NOT NULL的数据库列。所以你不能向它们插入NULL值。

希望这有帮助:)