ERROR Duplicate entry '2' for key 'PRIMARY''
Fermé
Etudiante
-
Modifié par Etudiante le 21/05/2014 à 10:08
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 21 mai 2014 à 11:39
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 - 21 mai 2014 à 11:39
A voir également:
- Duplicate entry '1' for key 'primary'
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Awesome duplicate photo finder - Télécharger - Divers Utilitaires
- Duplicate cleaner free - Télécharger - Divers Utilitaires
- Auslogics duplicate file finder - Télécharger - Nettoyage
- Key windows 10 gratuit - Guide
1 réponse
Pitet
Messages postés
2826
Date d'inscription
lundi 11 février 2013
Statut
Membre
Dernière intervention
21 juillet 2022
526
Modifié par Pitet le 21/05/2014 à 11:40
Modifié par Pitet le 21/05/2014 à 11:40
Salut,
Ta requête SELECT 'code' as code FROM 'contenu' te retourne tous les codes de la table contenu, donc si tu as 2 contenus, tu obtiens la liste suivante :
1
2
Puisque tu ne fait qu'un seul fetch, tu récupère la premier code de la liste précédente, soit 1, auquel tu ajoutes 1, soit la valeur 2. Or le contenu avec le code 2 existe déjà.
Pour corriger cela, il faudrait modifier ta requête select pour récupérer le dernier code ajouté, par exemple :
SELECT 'code' as code FROM 'contenu' ORDER BY code DESC
Avec cette requête on tri les résultats dans l'ordre décroissant, nous obtenons donc la liste suivante :
2
1
Le reste du code fonctionnera donc correctement. D'ailleurs puisque nous voulons récupérer uniquement le dernier code ajouté, nous pouvons limiter le résultat de notre requête select à un seul résultat :
SELECT 'code' as code FROM 'contenu' ORDER BY code DESC LIMIT 1
Mais...
Si dans ta base de données tu as bien défini le champ code en tant que auto_increment, celui va automatiquement s'incrémenter à chaque requête insert, tu n'as donc pas besoin de le préciser dans ces requêtes :
$req="INSERT INTO 'borg'.'contenu' ('code_sujet', 'text_contenu') VALUES ('".$codeSujet."', '".$textPage."');";
Ainsi tu n'as pas besoin de faire de requête select pour récupérer le dernier code utilisé.
Bonne journée
Ta requête SELECT 'code' as code FROM 'contenu' te retourne tous les codes de la table contenu, donc si tu as 2 contenus, tu obtiens la liste suivante :
1
2
Puisque tu ne fait qu'un seul fetch, tu récupère la premier code de la liste précédente, soit 1, auquel tu ajoutes 1, soit la valeur 2. Or le contenu avec le code 2 existe déjà.
Pour corriger cela, il faudrait modifier ta requête select pour récupérer le dernier code ajouté, par exemple :
SELECT 'code' as code FROM 'contenu' ORDER BY code DESC
Avec cette requête on tri les résultats dans l'ordre décroissant, nous obtenons donc la liste suivante :
2
1
Le reste du code fonctionnera donc correctement. D'ailleurs puisque nous voulons récupérer uniquement le dernier code ajouté, nous pouvons limiter le résultat de notre requête select à un seul résultat :
SELECT 'code' as code FROM 'contenu' ORDER BY code DESC LIMIT 1
Mais...
Si dans ta base de données tu as bien défini le champ code en tant que auto_increment, celui va automatiquement s'incrémenter à chaque requête insert, tu n'as donc pas besoin de le préciser dans ces requêtes :
$req="INSERT INTO 'borg'.'contenu' ('code_sujet', 'text_contenu') VALUES ('".$codeSujet."', '".$textPage."');";
Ainsi tu n'as pas besoin de faire de requête select pour récupérer le dernier code utilisé.
Bonne journée