Bonjour.
Je suis actuellement entrain d'appliquer le tutoriel "Stocker des images dans MySQL" pour les besoins de mon application web.

J'envoie le fichier via ce formulaire html :

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
 
 <form enctype="multipart/form-data" action="#" method="post">
         <input type="file" name="img" size=50 />
         <input type="submit" value="Envoyer" />
    </form>

La table correspondante dans la base de données :
Nom : bdd.png
Affichages : 89
Taille : 29,2 Ko

Le code PHP pour l'insertion de l'image récupérer dans la variable $_FILES :
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
 
if ( isset($_FILES['img']) )
    {
        $link        = false;
        $img_blob   = '';
        $img_taille = 0;
        $img_type   = '';
        $img_nom    = '';
        $taille_max = 400000;
        $link        = is_uploaded_file($_FILES['img']['tmp_name']);
 
        if ($link == false) {
            echo "Problème de transfert";
            return false;
        } else {
            // Le fichier a bien été reçu
            $img_taille = $_FILES['img']['size'];
 
            if ($img_taille > $taille_max) {
                echo "<script> alert('Fichier trop gros !');</script>";
                return false;
            }
 
            if (strlen($_FILES['img']['name']) > 50){
                echo "<script> alert('Nom de fichier trop grand !');</script>";
                return false;
            }
 
            $img_type = $_FILES['img']['type'];
            $img_nom  = $_FILES['img']['name'];
 
 
            // Connexion à la database
 
            $database=$_SERVER['DOCUMENT_ROOT'].'/menuiserie/database.db';
            try{
            $link = new PDO('mysql:host=localhost;dbname=menuiserie;charset=utf8', 'root', '');
            $link->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_ASSOC);
            $link->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // ERRMODE_WARNING | ERRMODE_EXCEPTION | ERRMODE_SILENT
            } catch(Exception $e) {
            echo "\nImpossible d'accéder à la base de données MySQL : ".$e->getMessage();
            die();
            }
 
 
            $img_blob = file_get_contents ($_FILES['img']['tmp_name']);
 
            $req = "INSERT INTO 'images' VALUES (" .
            "'" . $img_nom . "', " .
            "'" . $img_taille . "', " .
            "'" . $img_type . "', " .
            "'" . addslashes ($img_blob) . "'); "; // Echappement du contenu binaire
 
            foreach($link->query($req) as $transfer){
                echo "tranfert réussi";
            }
        }
    }

Le problème est le suivant : Lorsque je tente d'enregistrer une image dans la database, PDO m'informe d'une erreur de syntaxe dans ma requête SQL (voir lignes 48 à 52 du code PHP) : "Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1064 You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''images' VALUES ('image.jpg', '341068', 'image/jpeg', '????\0JFIF\0\0H\0H...' at line 1 in /opt/lampp/htdocs/menuiserie/assets/php/realisations.php:59 Stack trace: #0 /opt/lampp/htdocs/menuiserie/assets/php/realisations.php(59): PDO->query('INSERT INTO 'im...') #1 {main} thrown in /opt/lampp/htdocs/menuiserie/assets/php/realisations.php on line 59".

La requête SQL me paraît pourtant correcte ...
Merci pour votre aide.