Как загрузить изображения в базу данных MySQL с помощью PHP-кода
Я пытаюсь сохранить изображения в моей базе данных из формы 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
Ответы
Ответ 1
Во-первых, вы должны проверить, если ваш столбец изображения имеет тип BLOB!
Я ничего не знаю о вашей таблице SQL, но если я попытаюсь сделать свой собственный пример.
Мы получили поля id
(int), image
(blob) и image_name
(varchar (64)).
Таким образом, код должен выглядеть так (предположим, что идентификатор всегда равен "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>
Sidenote:
При работе с файлами и их хранении в виде BLOB данные должны быть экранированы с помощью mysql_real_escape_string()
, иначе это приведет к синтаксической ошибке.
Ответ 2
Еще несколько деталей:
`image` blob
- Получить данные с изображения
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
- Вставить данные изображения в db
$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";
- Показать изображение в Интернете
<img src="data:image/png;base64,'.base64_encode($row['image']).'">
Ответ 3
Как вставить в DB?
<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>";
}
}
}
?>