Cómo cargar imágenes en la base de datos MySQL usando código PHP

Resuelto Taha Kirmani asked hace 54 años • 3 respuestas

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.

Taha Kirmani avatar Jan 01 '70 08:01 Taha Kirmani
Aceptado

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.

Wiktor Mociun avatar Jul 18 '2013 08:07 Wiktor Mociun

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
Lit avatar Feb 12 '2014 15:02 Lit