Voici un extrait de script php; il y a 3 requêtes successives de mise
à jour d'un table "gest_table".
$sql="update gest_table set choix=replace(choix, '$choix', '' ) WHERE
FIND_IN_SET('$choix', choix)";
$resultat1 = mysql_db_query(BASE,$sql);
$sql="update gest_table set choix= replace(choix,',,',',')";
$resultat1 = mysql_db_query(BASE,$sql);
$sql="update gest_table set choix= concat(choix,',','$choix') where
FIND_IN_SET(id,'$lis_id')";
$resultat1 = mysql_db_query(BASE,$sql);
Je constate que la premère et la troisième requêtes s'exécutent
comme il faut, mais que la deuxième n'a aucun effet (elle doit
remplacer les virgules doubles par une virguel simple)
choix est un champ contenant des données séparées par des virgules.
Si une donnée est effacée, une virgule double reste présente...
Lorsque je copie cette deuxième requête et que je l'exécute avec
phpMyAdmin, elle s'exécute comme il faut.
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
P'tit Marcel
$sql="update gest_table set choix=replace(choix, '$choix', '' ) WHERE FIND_IN_SET('$choix', choix)"; $resultat1 = mysql_db_query(BASE,$sql);
cette fonction est obsolète. Emploie plutôt des mysql_query après un unique mysql_select_db. par ailleurs, tu devrais après chaque update vérifier qu'il s'est bien déroulé :
if ($resultat1 === false) { /* problème */ } elseif (mysql_affected_rows($resultat1)==0) { /* pas de mise à jour */ }
$sql="update gest_table set choix= replace(choix,',,',',')"; $resultat1 = mysql_db_query(BASE,$sql);
$sql="update gest_table set choix= concat(choix,',','$choix') where FIND_IN_SET(id,'$lis_id')"; $resultat1 = mysql_db_query(BASE,$sql);
Je constate que la premère et la troisième requêtes s'exécutent comme il faut, mais que la deuxième n'a aucun effet
Apparemment, la colonne choix est de type "set". ça me paraît dangereux d'employer la fonction replace qui s'applique aux données de type "chaîne".
Sur le fond, ta question semble plutôt concerner MySQL que php. Je te suggère donc de poser ta question sur le forum fr.comp.applications.sgbd
eça -- P'tit Marcel
$sql="update gest_table set choix=replace(choix, '$choix', '' ) WHERE
FIND_IN_SET('$choix', choix)";
$resultat1 = mysql_db_query(BASE,$sql);
cette fonction est obsolète. Emploie plutôt des mysql_query après un
unique mysql_select_db. par ailleurs, tu devrais après chaque update
vérifier qu'il s'est bien déroulé :
if ($resultat1 === false) { /* problème */ }
elseif (mysql_affected_rows($resultat1)==0) { /* pas de mise à jour */ }
$sql="update gest_table set choix= replace(choix,',,',',')";
$resultat1 = mysql_db_query(BASE,$sql);
$sql="update gest_table set choix= concat(choix,',','$choix') where
FIND_IN_SET(id,'$lis_id')";
$resultat1 = mysql_db_query(BASE,$sql);
Je constate que la premère et la troisième requêtes s'exécutent
comme il faut, mais que la deuxième n'a aucun effet
Apparemment, la colonne choix est de type "set". ça me paraît dangereux
d'employer la fonction replace qui s'applique aux données de type "chaîne".
Sur le fond, ta question semble plutôt concerner MySQL que php. Je te
suggère donc de poser ta question sur le forum fr.comp.applications.sgbd
$sql="update gest_table set choix=replace(choix, '$choix', '' ) WHERE FIND_IN_SET('$choix', choix)"; $resultat1 = mysql_db_query(BASE,$sql);
cette fonction est obsolète. Emploie plutôt des mysql_query après un unique mysql_select_db. par ailleurs, tu devrais après chaque update vérifier qu'il s'est bien déroulé :
if ($resultat1 === false) { /* problème */ } elseif (mysql_affected_rows($resultat1)==0) { /* pas de mise à jour */ }
$sql="update gest_table set choix= replace(choix,',,',',')"; $resultat1 = mysql_db_query(BASE,$sql);
$sql="update gest_table set choix= concat(choix,',','$choix') where FIND_IN_SET(id,'$lis_id')"; $resultat1 = mysql_db_query(BASE,$sql);
Je constate que la premère et la troisième requêtes s'exécutent comme il faut, mais que la deuxième n'a aucun effet
Apparemment, la colonne choix est de type "set". ça me paraît dangereux d'employer la fonction replace qui s'applique aux données de type "chaîne".
Sur le fond, ta question semble plutôt concerner MySQL que php. Je te suggère donc de poser ta question sur le forum fr.comp.applications.sgbd
eça -- P'tit Marcel
jpw
Merci, je vais poser la quetion sur fr.comp.applications.sgbd.
Merci, je vais poser la quetion sur fr.comp.applications.sgbd.
Merci, je vais poser la quetion sur fr.comp.applications.sgbd.
Bruno Desthuilliers
(snip)
choix est un champ contenant des données séparées par des virgules. (snip)
QQ1 aurait-il une explication?
Oui : c'est un mauvais schema. Un champ doit être atomique (ie: monovalué). Pour un attribut multivalué, utiliser une seconde table, liée à la première par une clée étrangère. Si tu (ou l'auteur de ce schema) avais fait ça, tu ne serais pas en train de perdre du temps avec des virgules qui trainent...
(snip)
choix est un champ contenant des données séparées par des virgules.
(snip)
QQ1 aurait-il une explication?
Oui : c'est un mauvais schema. Un champ doit être atomique (ie:
monovalué). Pour un attribut multivalué, utiliser une seconde table,
liée à la première par une clée étrangère. Si tu (ou l'auteur de ce
schema) avais fait ça, tu ne serais pas en train de perdre du temps avec
des virgules qui trainent...
choix est un champ contenant des données séparées par des virgules. (snip)
QQ1 aurait-il une explication?
Oui : c'est un mauvais schema. Un champ doit être atomique (ie: monovalué). Pour un attribut multivalué, utiliser une seconde table, liée à la première par une clée étrangère. Si tu (ou l'auteur de ce schema) avais fait ça, tu ne serais pas en train de perdre du temps avec des virgules qui trainent...