[RESOLU] Erreur PDOexception que je n'arrive pas à résoudre

Aiko Froux
Invité n'ayant pas de compte PHPfrance

23 sept. 2019, 08:29

Bonjour je suis entrain d'apprendre à faire un site en php, mais je reçois deux erreurs plutôt embarrassante car je n'arrive pas à les résoudre :
Fatal error: Uncaught PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\wamp64\www\Ai-Store\admin\admin.php on line 32
PDOException: SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1 in C:\wamp64\www\Ai-Store\admin\admin.php on line 32

J'ai fais des recherches mais impossible de trouver une solution qui convenait à mon problème, merci d'avance pour votre aide et voici mon code et ma table :

Ma table Phpmyadmin
https://image.noelshack.com/fichiers/20 ... apture.png

Mon code :

Code : Tout sélectionner

<link rel="stylesheet" href="style/admin.css"> <link href="https://fonts.googleapis.com/css?family=Roboto&display=swap" rel="stylesheet"> <body> <?php session_start(); try{ $db = new PDO('mysql:host=127.0.0.1;dbname=ai-store', 'root',''); $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); // les noms de champs seront en caractères minuscules $db->setAttribute(PDO::ATTR_ERRMODE , PDO::ERRMODE_EXCEPTION); // les erreurs lanceront des exceptions } catch(Exception $e){ die('Une erreur est survenue'); } if(isset($_SESSION['username'])) { if(isset($_GET['action'])) { if($_GET['action']=='add'){ if(isset($_POST['submit'])) { $title=$_POST['title']; $description=$_POST['description']; $price=$_POST['price']; if($title&&$description&&$price) { $insert = $db->prepare("INSERT INTO products VALUES('','$title','$description','$price')"); $insert->execute(); }else { echo'<b><p class="ec">Veuillez remplir tous les champs !</p></b>'; } } ?> <form action="" method="post"> <h3>Titre du produit :</h3><input type="text" name="title"/> <h3>Description :</h3><input type="text" name="description"/> <h3>Prix :</h3><input type="text" name="price" /> <input type="submit" name="submit"/> </form> <?php }else if($_GET['action']=='modify') { }else if($_GET['action']=='delete') { }else { die('Error'); } }else{ } }else{ header('Location: ../index.php'); } ?> <h1>Bienvenue, <?php echo $_SESSION['username']; ?> !</h1> <a href="?action=add">Ajouter - Produit</a> <a href="?action=modify">Modifier - Produit</a> <a href="?action=delete">Supprimer - Produit</a> </body>

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

23 sept. 2019, 10:40

Bonjour,

Le message d'erreur est plutôt explicite :
Incorrect integer value: '' for column 'id'
Tu essayes de mettre une valeur vide à la colonne ID or c'est impossible, très probablement parce que lors de la création de ta table tu as indiqué que cette colonne ne peut pas avoir de valeur nulle.

Par ailleurs, je te recommande fortement de nommer tes colonnes dans tes INSERT car cela évitera les problèmes si tu devras faire évoluer ta table plus tard.
INSERT INTO table (colonne1, colonne2, colonne3) VALUES ('valeur1', 'valeur2', 'valeur3')
Tu peux aussi utiliser la syntaxe MySQL avec SET que je trouve encore + lisible :
INSERT INTO table SET colonne1='valeur1', colonne2='valeur2', colonne3='valeur3'
Si ton champ id est en AUTO_INCREMENT, alors il te suffit de ne pas l'indiquer dans ta requête et MySQL complètera automatiquement.
Quand tout le reste a échoué, lisez le mode d'emploi...

Aiko Froux
Invité n'ayant pas de compte PHPfrance

23 sept. 2019, 19:19

Bonjour merci pour votre réponse ! Alors, j'ai essayé avec la syntaxe MySQL serte je n'ai pas d'erreur mais mes informations ne sont pas envoyé dans ma table :( comme dis je suis débutant donc je me suis peut être trompé voici ce que j'ai changer :

Code : Tout sélectionner

$insert = $db->prepare("INSERT INTO table SET title='$title', description='$description', price='$price'");

Mammouth du PHP | 2703 Messages

23 sept. 2019, 19:28

si la table ne s’appelle pas table, cela ne fonctionnera pas. s'il y a un ' dans un des 3 champs, cela ne fonctionnera pas.

Aiko Froux
Invité n'ayant pas de compte PHPfrance

23 sept. 2019, 19:33

Ah oui merci en effet c'est assez bête comme erreur et bien merci beaucoup ça marche :)