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


Los Santos Police Department
Auteur
Réponse acceptée

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)

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.

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 ;(

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(...)

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

EDIT : Ne fonctionne pas.

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"]]);