Insertion et modification d'un tuple
siananox
-
siananox -
siananox -
Bonjour,
Je suis en plein devoir PHP
On me demande d'insérer une note dans une base (appelons là "etudiants"), ça fonctionne très bien, voici le code que je tape :
//Insertion d'une nouvelle note étudiant
$reponse = $bd->exec('INSERT INTO notes (Note, IdEtudiant, IdUE)
VALUES(\'12\',\'30001459\',\'1008\')');
echo "insertion réussie";
L'autre question c'est la modification d'une note, et là le localhost ne veut rien savoir ...
Je tape ça :
//Correction de la note d'un étudiant
$reponse = $bd->exec('UPDATE notes
SET Note=\'19\', IdEtudiant=\'35010192\', IdUE=\'1008\'');
echo "modification réussie";
Il me répond ça ... :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '30001459-1008' for key 'PRIMARY'' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php:44 Stack trace: #0 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php(44): PDO->exec('INSERT INTO not...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php on line 44
Merci de vos réponses, je désespère :'(
Je suis en plein devoir PHP
On me demande d'insérer une note dans une base (appelons là "etudiants"), ça fonctionne très bien, voici le code que je tape :
//Insertion d'une nouvelle note étudiant
$reponse = $bd->exec('INSERT INTO notes (Note, IdEtudiant, IdUE)
VALUES(\'12\',\'30001459\',\'1008\')');
echo "insertion réussie";
L'autre question c'est la modification d'une note, et là le localhost ne veut rien savoir ...
Je tape ça :
//Correction de la note d'un étudiant
$reponse = $bd->exec('UPDATE notes
SET Note=\'19\', IdEtudiant=\'35010192\', IdUE=\'1008\'');
echo "modification réussie";
Il me répond ça ... :
Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '30001459-1008' for key 'PRIMARY'' in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php:44 Stack trace: #0 C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php(44): PDO->exec('INSERT INTO not...') #1 {main} thrown in C:\Program Files (x86)\EasyPHP-DevServer-14.1VC9\data\localweb\my portable files\connexion.php on line 44
Merci de vos réponses, je désespère :'(
6 réponses
-
Bonjour,
Il semblerait que tu passes plusieurs fois dans ton code qui fait l'insert.
Duplicate entry '30001459-1008' for key 'PRIMARY'' indique que tes clés primaires IdEtudiant-IdUE existent déjà dans la BDD, donc l'insert te sort l'erreur car tu as déjà une ligne avec IdEtudiant=30001459 et avec IdUE = 1008.
Rajoute une condition pour faire ton insert qu'une seule fois. -
-
Encore mieux: au lieu du insert utilises REPLACE, si la ligne n'existe pas elle est créée et si elle existe elle est mise à jour :
REPLACE INTO notes
SET Note= ‘12′,
IdEtudiant = '30001459',
IdUE = '1008'
ça devrait lever ton erreur. Sinon, joints ton code en utilisant la balise code associée. -
Merci mille fois de tes réponses !
Le soucis c'est que je dois clairement distinguer l'insertion de la modification dans mon devoir -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
dans ce cas quand tu fais l'insert, récupère l'id créé :
$last_id = $bd->lastInsertId();
et avant de faire le insert tu rajoutes :
if(!$last_id){
//code insert
}else{
//code update
}
mais pour cela il faut que tu ais un champ AUTO_INCREMENT comme clé primaire. -