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 :
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.
Partager