我正在尝试从HTML表单中保存数据库中的图像。我编写了PHP代码来完成这项任务。该程序不会生成任何错误消息,但也不会在MySQL数据库中插入图像数据。请检查一下。 在这里,我将从我的代码中分享一段摘录。
/*-------------------
IMAGE QUERY
---------------*/
$file =$_FILES['image']['tmp_name'];
if(!isset($file))
{
echo 'Please select an Image';
}
else
{
$image_check = getimagesize($_FILES['image']['tmp_name']);
if($image_check==false)
{
echo 'Not a Valid Image';
}
else
{
$image = file_get_contents ($_FILES['image']['tmp_name']);
$image_name = $_FILES['image']['name'];
if ($image_query = mysql_query ("insert into product_images values (1,'$image_name',$image )"))
{
echo $current_id;
//echo 'Successfull';
}
else
{
echo mysql_error();
}
}
}
/*-----------------
IMAGE QUERY END
---------------------*/
<form action='insert_product.php' method='POST' enctype='multipart/form-data' ></br>
File : <input type='file' name= 'image' >
</form>
错误消息 您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法 靠近''第1行
答案 0 :(得分:39)
首先,您应该检查图像列是否为BLOB类型!
我对你的SQL表一无所知,但如果我试着以自己的方式为例。
我们有字段 id
(int), image
(blob)和 image_name
(VARCHAR(64))。
所以代码应该是这样的(假设ID总是'1',让我们使用这个mysql_query):
$image = addslashes(file_get_contents($_FILES['image']['tmp_name'])); //SQL Injection defence!
$image_name = addslashes($_FILES['image']['name']);
$sql = "INSERT INTO `product_images` (`id`, `image`, `image_name`) VALUES ('1', '{$image}', '{$image_name}')";
if (!mysql_query($sql)) { // Error handling
echo "Something went wrong! :(";
}
你在很多方面做错了。不要使用mysql函数 - 它们已被弃用!使用PDO或MySQLi。您还应该考虑在磁盘上存储文件位置。使用MySQL存储图像被认为是Bad Idea™。使用像图像这样的大数据处理SQL表可能会有问题。
此外,您的HTML表单超出了标准。它应该是这样的:
<form action="insert_product.php" method="POST" enctype="multipart/form-data">
<label>File: </label><input type="file" name="image" />
<input type="submit" />
</form>
旁注:
处理文件并将其存储为BLOB时,必须使用mysql_real_escape_string()
对数据进行转义,否则会导致语法错误。
答案 1 :(得分:18)
更多细节:
`image` blob
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";
<img src="data:image/png;base64,'.base64_encode($row['image']).'">
答案 2 :(得分:-1)
这是用于通过MySQL数据库上传和显示图像的完美代码。
<html>
<body>
<form method="post" enctype="multipart/form-data">
<input type="file" name="image"/>
<input type="submit" name="submit" value="Upload"/>
</form>
<?php
if(isset($_POST['submit']))
{
if(getimagesize($_FILES['image']['tmp_name'])==FALSE)
{
echo " error ";
}
else
{
$image = $_FILES['image']['tmp_name'];
$image = addslashes(file_get_contents($image));
saveimage($image);
}
}
function saveimage($image)
{
$dbcon=mysqli_connect('localhost','root','','dbname');
$qry="insert into tablename (name) values ('$image')";
$result=mysqli_query($dbcon,$qry);
if($result)
{
echo " <br/>Image uploaded.";
header('location:urlofpage.php');
}
else
{
echo " error ";
}
}
?>
</body>
</html>
答案 3 :(得分:-2)
如何插入数据库?
<html>
<head>
<title>Uploads</title>
</head>
<body>
<input type="file" name="file_array[]"/>
<input type="file" name="file_array[]"/>
<input type="file" name="file_array[]"/>
<input type="submit" name="submit"/>
</body>
</html>
<?php
if(isset($_FILES['file_array']))
{
$name_array = $_FILES['file_array']['name'];
$tmp_name_array = $_FILES['file_array']['tmp_name'];
$type_array = $_FILES['file_array']['type'];
$size_array = $_FILES['file_array']['size'];
$error_array = $_FILES['file_array']['error'];
$dir = "slideshow";
for($i = 0; $i<count($tmp_name_array); $i++)
{
if(move_uploaded_file($tmp_name_array,"slideshow/".$name_array))
{
echo $name_array[$i]."Upload is complete<br>";
} else {
echo"Move_uploaded_file function failed for".$name_array[$i]."<br>";
}
}
}
?>