web-dev-qa-db-fra.com

Comment télécharger des images dans la base de données MySQL en utilisant PHP code)

J'essaie de sauvegarder des images dans ma base de données à partir d'un formulaire HTML. J'ai écrit PHP code pour accomplir cette tâche. Le programme ne génère aucun message d'erreur, mais n'insère pas non plus de données d'image dans la base de données MySQL. Veuillez le vérifier. Ici, je partage un extrait de mon code.

        /*-------------------
    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>

Message d'erreur Votre syntaxe SQL contient une erreur. vérifiez le manuel correspondant à la version de votre serveur MySQL pour connaître la syntaxe à utiliser près de '' à la ligne 1

22
Taha Kirmani

Tout d’abord, vous devriez vérifier si votre colonne d’image est de type BLOB !

Je ne sais rien de votre table SQL, mais si je vais essayer de créer le mien à titre d'exemple.

Nous avons des champs id (int), image (blob) et image_name (varchar (64)).

Le code devrait donc ressembler à ceci (supposons que l'ID soit toujours '1' et utilisons ceci 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! :("; 
}

Vous le faites mal à bien des égards. N'utilisez pas les fonctions mysql - elles sont obsolètes! Utilisez PDO ou MySQLi . Vous devriez également penser à stocker les emplacements de fichiers sur le disque. L'utilisation de MySQL pour stocker des images est considérée comme une mauvaise idée. La manipulation d'une table SQL avec des données volumineuses telles que des images peut être problématique.

De plus, votre formulaire HTML est hors normes. Ça devrait ressembler à ça:

<form action="insert_product.php" method="POST" enctype="multipart/form-data">
    <label>File: </label><input type="file" name="image" />
    <input type="submit" />
</form>

Sidenote:

Lorsque vous traitez des fichiers et les stockez sous forme de BLOB, vous devez échapper les données à l'aide de mysql_real_escape_string() , sinon une erreur de syntaxe sera générée.

41
Wiktor Mociun

Juste quelques détails supplémentaires

  • Ajouter un champ mysql

`image` blob

  • Obtenir des données de l'image

$image = addslashes(file_get_contents($_FILES['image']['tmp_name']));

  • Insérer des données d'image dans la base de données

$sql = "INSERT INTO `product_images` (`id`, `image`) VALUES ('1', '{$image}')";

  • Afficher l'image sur le Web

<img src="data:image/png;base64,'.base64_encode($row['image']).'">

  • Fin
18
Sean