PDO Update avec Foreign Key
Fermé
J@rodd
Messages postés
39
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
26 octobre 2015
-
24 oct. 2015 à 02:01
Utilisateur anonyme - 26 oct. 2015 à 19:24
Utilisateur anonyme - 26 oct. 2015 à 19:24
A voir également:
- PDO Update avec Foreign Key
- Windows update 0x80070643 - Accueil - Windows
- Windows update bloqué - Guide
- Asus live update - Télécharger - Utilitaires
- Show key plus - Télécharger - Utilitaires
- Key windows 10 gratuit - Guide
4 réponses
DelNC
Messages postés
2234
Date d'inscription
samedi 25 octobre 2014
Statut
Membre
Dernière intervention
22 février 2020
2 002
24 oct. 2015 à 09:41
24 oct. 2015 à 09:41
Bonjour,
Voici un exemple de UPDATE
Le problème c'est que, comme vous le d^tes, s'il y a plusieurs lignes dans la table artCategories qui ont article_id = 10
elles seront toues mdifiées en même temps
Voici un exemple de UPDATE
$query = "UPDATE users ";
$query .= "SET ";
$query .= " login = '" . $login . "',";
$query .= "WHERE id_user = 10 ";
$query .= "; ";
$result = execute_query($query);
Le problème c'est que, comme vous le d^tes, s'il y a plusieurs lignes dans la table artCategories qui ont article_id = 10
elles seront toues mdifiées en même temps
Utilisateur anonyme
24 oct. 2015 à 11:49
24 oct. 2015 à 11:49
Nah, je ne crois pas que l'update de plusieurs lignes renvoie cette erreur, ce doit plutôt être parce que la colonne category_id est unique. Pour remédier à ce problème, il faut te rendre dans phpMyAdmin, et changer le type d'index de cette colonne.
J@rodd
Messages postés
39
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
26 octobre 2015
24 oct. 2015 à 20:26
24 oct. 2015 à 20:26
( ! ) Fatal error: Uncaught exception 'PDOException' with message 'SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10-1' for key 'PRIMARY'' in (..)\tutos\beta\class\Database.php on line 17
( ! ) PDOException: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '10-1' for key 'PRIMARY' in (..)\tutos\beta\class\Database.php on line 17
Le fichier database contient une class qui m'exécute mes query et la connexion bdd.
Voici la requete que j'utilise actuellement et qui me donne ce message :
UPDATE articles a
LEFT JOIN aticles_categories ac
ON a.article_id = ac.article_id
LEFT JOIN categories c
ON c.category_id = ac.category_id
SET ac.category_id = :new, ac.last_update = NOW()
WHERE (ac.category_id = :old AND a.article_id = :id)
C'est le seul moyen que j'au pu trouver si loin pour pouvoir faire les update même si je dois récupérer les ancien enregistrements, et lui dire me remplace le old vs le new sur la table articles_categories where article = 1 par exemple.
Au niveau du php, ça se pourrai que c'est la que je bloque et non au SQl ?
PHP :
<select name="cats[]">
<option value="1">test1</option>
</select>
----------
$new= $_POST['cats'];
foreach($data = Categories::getArticleCategories($db,$id) as $data => $old){//Récupère les anciens enregistrements liée à l'article
Article::updateArticle($db,$old->CID,$new,$id);
//update les enregistrement présents dans la table
}
A mon avis c'est au PHP que je bloque...
Nah, c'est bel et bien un message d'erreur de mysql! #=
Le problème est que tu tentes de donner une valeur à un champs dans une colonne où cette valeur existe déjà. As-tu créé une colonne id primary avec auto_increment dans la table articles_categories? Encore une fois, rends-toi dans phpmyadmin, sur la table articles_categories, sous l'onglet structure et clique sur le petit + Index. Dis-moi ce que tu y trouves ou prend une capture écran, c'est la que ça bloque je crois.
Le problème est que tu tentes de donner une valeur à un champs dans une colonne où cette valeur existe déjà. As-tu créé une colonne id primary avec auto_increment dans la table articles_categories? Encore une fois, rends-toi dans phpmyadmin, sur la table articles_categories, sous l'onglet structure et clique sur le petit + Index. Dis-moi ce que tu y trouves ou prend une capture écran, c'est la que ça bloque je crois.
J@rodd
Messages postés
39
Date d'inscription
mercredi 5 octobre 2011
Statut
Membre
Dernière intervention
26 octobre 2015
26 oct. 2015 à 09:07
26 oct. 2015 à 09:07
Salut,
Voici la structure de la table et y a pas de AI car les données correspondent au ID de la table articles et categories :
Voici la structure de la table et y a pas de AI car les données correspondent au ID de la table articles et categories :
CREATE TABLE IF NOT EXISTS `articles_categories` (
`article_id` smallint(5) unsigned NOT NULL,
`category_id` tinyint(3) unsigned NOT NULL,
`last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`article_id`,`category_id`),
KEY `fk_article_category_category` (`category_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Utilisateur anonyme
26 oct. 2015 à 19:24
26 oct. 2015 à 19:24
Bon je comprend absolument ton point, mais si on y ajoutait un tout petit id, question qui ait une colonne vraiment unique. comme ceci!, ça fonctionne?
CREATE TABLE IF NOT EXISTS `articles_categories` ( `id` int unsigned NOT NULL auto_increment, `article_id` smallint(5) unsigned NOT NULL, `category_id` tinyint(3) unsigned NOT NULL, `last_update` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, /*Les clés primaires identifient chaque ligne de façon unique. Ainsi, si category_id ou article_id en sont, ces colonnes ne pourront pas supporter 2 valeurs identiques, d'où duplicate entry '10-1' for key PRIMARY.*/ PRIMARY KEY (`id`), KEY `fk_article_category_category` (`category_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
24 oct. 2015 à 15:56
Mais je en pense pas que ça fonctionnera (deja testé), le truc c'est que comme la table "ARTICLES" peux avoir plusieurs CATEGORY et inverse aussi.
Donc je veux surtout pas que j'ai un doublons, tu vois ?
si j'ai pas exemple un resultat dans ma table "articles_categories" :=>
Dans ma table j'ai quelque chose de similaire..Et si si je veux changer les category de l'article(1) ça bloque.
J'espère que j'ai été clair et je m'en mêle pas les pinceaux.
@Sunr =>
Ils sont aussi en UPDATE Cascade et DELETE Restrict
Je ne pense pas que j'ai mal structuré la table
24 oct. 2015 à 20:08