在MySQL数据库中插入图像时发生mysql错误
我在一个网站上工作,我的任务是从用户处取得产品图像并将该图像存储在数据库中..我使用mysql数据库。 我对HTML表单代码如下: -在MySQL数据库中插入图像时发生mysql错误
<FORM action="testimage1.php" ENCTYPE="multipart/form-data" method="post">
<div style="font:bold 10px arial,serif;" >Product Name*</div>
<input type="text" name="myuserName" maxlength="50" /><br />
<div style="font:bold 10px arial,serif;" >Upload a photo</div>
<input name="uploadimage" type="file" /></br>
<div style="font:bold 10px arial,serif;">Product Description:</div>
<input type="text" name="product" value=""></br>
<input id="submit" type="submit" value="submit" /><br />
</FORM>
我对testimage1.php代码如下: -
require_once("dbconnect.inc.php");
$db_name="thinstrokes"; //for localhost databasename
$tbl_name="product";
$db_selected=mysql_select_db("$db_name")or die("cannot select DB");
$myusername=$_POST['myusername'];
$mypassword=$_POST['product'];
$filename=$_FILES['uploadimage']['tmp_name'];
$imgData = file_get_contents($filename);
$size = getimagesize($filename);
$sql = "INSERT INTO product
(productname, image_id , image_type ,image, image_size, image_name, productdesc)VALUES
('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}',
'{$_FILES['userfile']['name']}','$productdesc')";
$result=mysql_query($sql) or die("error in uploading/*");
和我收到一个错误: - 错误的上传/ * 如何我可以纠正它吗?
尝试改变这一点:
$sql = "INSERT INTO product
(productname, image_id , image_type ,image, image_size, image_name, productdesc)VALUES
('$myusername','11', '{$size['mime']}', '{$imgData}', '{$size[3]}',
'{$_FILES['userfile']['name']}','$productdesc')";
与此:
$size_mime = mysql_real_escape_string($size['mime']);
$size3 = mysql_real_escape_string($size[3]);
$filename = mysql_real_escape_string($_FILES['userfile']['name']);
$sql = "INSERT INTO product
(productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES
('{$myusername}','11', '{$size_mime}', '{$imgData}', '{$size3}',
'{$filename}','$productdesc')";
和编辑此:
$myusername=$_POST['myusername'];
$mypassword=$_POST['product'];
$filename=$_FILES['uploadimage']['tmp_name'];
与此:
$myusername = mysql_real_escape_string($_POST['myusername']);
$mypassword = mysql_real_escape_string($_POST['product']);
$filedata = mysql_real_escape_string($_FILES['uploadimage']['tmp_name']);
你要绝对避免sql注入!
你需要把它变成一个查询之前逃脱$imgData
和一切与mysql_real_escape_string
。
我得到的错误为:-MySQL服务器已经消失 – Neeraj
天哪,我不知道它去了哪里。你试图坚持的图像有多大? – Okonomiyaki3000
您需要使用bound变量。首先你要对SQL injection进行全面攻击。
假如有人制作的\';DROP product;
文件名,并上载...
话虽这么说,内联二进制数据到一个查询恰恰是行不通的99%的时间。
对于绑定参数,您的查询变成这样,您可以调用bind_parm将数据附加到每个?
$sql = "INSERT INTO product (productname, image_id , image_type ,image, image_size, image_name, productdesc) VALUES (?,?,?,?,?,?,?)";
我收到错误消息,如...MySQL服务器已经消失 – Neeraj
尝试在文本编辑器中打开图像。这基本上就是你在这里做的。这只是不会工作。使用绑定变量或者如果您必须这样做,请在内联内容之前在图像数据上使用bin2hex() - > http://php.net/manual/en/function.bin2hex.php。 –
首先,我认为你不应该直接上传图像到Mysql。而是使用一个目录并将所有内容放在那里因此,随着中说尝试是这样的:
//target to the path of my files
$target_path = "uploads/product_images/";
if(!is_dir($target_path)) mkdir($target_path);
$uploadfile = $target_path . basename($_FILES['userfile']['name']);
//Move the uploaded file to $taget_path
(move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile));
然后你就可以使用到上传的文件执行以下操作:
echo "<a href=" . $target_path . basename($row['userfile']) . ">
{$row['userfile']}</a>";
如果你存储在磁盘上,你需要确保文件名是唯一的,或者一个用户的上传可以打开另一个文件。我建议为磁盘存储生成文件名,并使用表来存储从用户文件名到磁盘文件名的查找。如果你要有很多图像,制作子目录也是一个好主意,或者你可以用完目录inode。 –
更改此以查看真正的错误是$ result = mysql_query($ sql)还是die(mysql_error()); – bumperbox
尝试在'或die()'中添加'mysql_error()'。其实你不应该使用'或die()',因为这是不好的做法。它杀死了脚本。使用适当的错误处理。 – Tikkes
它打印错误为: - MySQL服务器已消失 – Neeraj