1 pièce(s) jointe(s)
Application du tutoriel "Stocker des images dans MySQL"
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:
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 :
Pièce jointe 575583
Le code PHP pour l'insertion de l'image récupérer dans la variable $_FILES :
Code:
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.