Insertion et modification d'un tuple

Fermé
siananox - 24 févr. 2017 à 16:04
 siananox - 24 févr. 2017 à 18:27
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 :'(

A voir également:

6 réponses

zucrezel Messages postés 30 Date d'inscription mardi 7 février 2017 Statut Membre Dernière intervention 19 juillet 2017 4
24 févr. 2017 à 17:23
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.
0
Je vais paraître complètement à l'ouest mais je ne sais pas comment faire!
0
zucrezel Messages postés 30 Date d'inscription mardi 7 février 2017 Statut Membre Dernière intervention 19 juillet 2017 4
24 févr. 2017 à 17:59
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.
0
Merci mille fois de tes réponses !

Le soucis c'est que je dois clairement distinguer l'insertion de la modification dans mon devoir
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
zucrezel Messages postés 30 Date d'inscription mardi 7 février 2017 Statut Membre Dernière intervention 19 juillet 2017 4
Modifié par zucrezel le 24/02/2017 à 18:24
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.
0
Je vais essayer tout ça !

Merci bcp :)
0