Cómo cargar imágenes en la base de datos MySQL usando código PHP
Estoy intentando guardar imágenes en mi base de datos desde un formulario HTML. He escrito código PHP para realizar esta tarea. El programa no genera ningún mensaje de error, pero tampoco inserta datos de imagen en la base de datos MySQL. Por favor compruébalo. Aquí estoy compartiendo un extracto de mi código.
/*-------------------
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>
Mensaje de error Tiene un error en su sintaxis SQL; Consulte el manual que corresponde a la versión de su servidor MySQL para conocer la sintaxis correcta que debe usar cerca de '' en la línea 1.
En primer lugar, debes verificar si tu columna de imagen es de tipo BLOB .
No sé nada sobre su tabla SQL, pero intentaré hacer la mía propia como ejemplo.
Obtuvimos los campos id
(int), image
(blob) y image_name
(varchar(64)).
Entonces el código debería verse así (supongamos que el ID es siempre '1' y usemos este 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! :(";
}
Lo estás haciendo mal en muchos sentidos. No utilice funciones de MySQL: ¡están en desuso! Utilice PDO o MySQLi . También deberías pensar en almacenar las ubicaciones de los archivos en el disco. Se cree que usar MySQL para almacenar imágenes es Bad Idea™. Manejar tablas SQL con big data como imágenes puede resultar problemático.
Además, su formulario HTML no cumple con los estándares. Debe tener un aspecto como este:
<form action="insert_product.php" method="POST" enctype="multipart/form-data">
<label>File: </label><input type="file" name="image" />
<input type="submit" />
</form>
Nota al margen:
Al tratar con archivos y almacenarlos como BLOB, los datos deben escaparse usando mysql_real_escape_string()
; de lo contrario, se producirá un error de sintaxis.
Sólo algunos detalles más :
- Agregar campo mysql
`image` blob
- Obtener datos de la imagen
$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));
- Insertar datos de imagen en db
$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";
- Mostrar imagen a la web
<img src="data:image/png;base64,'.base64_encode($row['image']).'">
- Fin