[PDO] Insérer la valeur ID

Par Los Santos Police Department, il y a 10 ans


Bonsoir !

Voila je rencontre un petit problème avec mon code. J'essaye d'insérer un ID dans ma base de données (préalablement) mis en Autoincrement et en primary mais voilà, il y a un code d'erreur

Ce que je fais

Voici ma requête

$create_account = $PDO->prepare("INSERT INTO accounts VALUES('', :pseudo, :secure_password, :email)"); $create_account->bindParam(":pseudo", $_POST["pseudo"], PDO::PARAM_STR); $create_account->bindParam(":secure_password", $secure_password, PDO::PARAM_STR); $create_account->bindParam(":email", $_POST["email"], PDO::PARAM_STR); $create_account->execute();

Ce que j'obtiens

Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[HY000]: General error: 1366 Incorrect integer value: '' for column 'id' at row 1'

Merci <3

PS : Désolé pour les fautes mais je suis fatigué de ce problème à la con (surtout que ça fait quelques mois que j'ai pas programmé :) )

6 réponses

Seenok, il y a 10 ans

Hello,

Je suis débutant aussi alors peut-être que je vais dire une connerie mais sait-on jamais :)

Qu'est ce qui se passe si t'enleves le la chaine vide de l'id dans ta requete SQL ?

tu laisses que le pseudo le password et l'email dans ta requete prepare.

Los Santos Police Department, il y a 10 ans
Uncaught exception 'PDOException' with message 'SQLSTATE[21S01]: Insert value list does not match column list: 1136 Column count doesn't match value count at row 1

Une autre message d'erreur. Y'a quelques mois, je savais régler cette erreur mais je suis retombé dans le fond ;(

Seenok, il y a 10 ans

Ah mais y a un souci sur ta requete sql tu lui dit, insere dans la table accounts les valeurs(...). Faut que tu lui précises les champs dans lesquels les valeurs seront injectés.
INSERT INTO accounts(id, pseudo, password, email) VALUES(...)

Los Santos Police Department, il y a 10 ans

J'ai déjà essayé mais ça n'a pas marché mais je vais réessayer ;)

EDIT : Ne fonctionne pas.

Los Santos Police Department, il y a 10 ans

Voici la solution :

$create_account = $PDO->prepare("INSERT INTO accounts SET pseudo = ?, password = ?, email = ?"); $create_account->execute([$_POST["pseudo"], $secure_password, $_POST["email"]]);

Par contre, j'ai quelques questions :
Pourquoi être obligé de mettre ça : (id, pseudo, password, email)

Benjamin Derepas, il y a 10 ans

Si ta clé primaire est en AutoIncremente, pas besoin de la préciser dans ta requête :

$create_account = $PDO->prepare("INSERT INTO accounts VALUES(':pseudo, :secure_password, :email)"); $create_account->execute([$_POST["pseudo"], $secure_password, $_POST["email"]]);