Gérer le forum:  Aide  •  Rechercher  •  Liste des Membres  •  Groupes d'utilisateurs   •  S'enregistrer  •  Profil  •  Se connecter pour vérifier ses messages privés  •  Connexion 
 [Résolu][PHP] Bizzarerie SQLienne Voir le sujet suivant
Voir le sujet précédent
Poster un nouveau sujetRépondre au sujet
Auteur Message
Adrien
Accro à Web-IG
Accro à Web-IG


Post-BTS
Sexe: Sexe:Masculin
Messages: 125
Localisation: Ile-de-France

MessagePosté le: Jeu 03 Aoû 2006 - 16:46 Répondre en citantRevenir en haut

Cela fait quelques heures que je m'arrache les cheveux.

Posons le contexte :

J'effectue un update dans une table. Celui-ci fonctionne lorsque le critère WHERE est OK, sinon ça n'update rien, logique.

Cependant, j'ai besoin de faire un test ensuite par rapport à l'état de l'exécution de cette requête. Donc :

$variable = mysql_query(blabla);

Et là, c'est le drame !

D'après la doc, dans le cas d'une requête UPDATE, mysql_query renvoie FALSE ou TRUE.
Or dans mon cas il renvoit 1. J'imagine que c'est TRUE, sauf qu'il renvoit 1 même quand l'update ne se fait pas !!!!!!!!

Et là je suis à deux doigts de tout jeter par la fenêtre.

Messieurs les développeurs ?
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailMSN MessengerNuméro ICQ

N'oubliez pas de vous inscrire à la communauté pour participer. Si vous êtes déjà membre, connectez-vous pour faire disparaître ce bandeau publicitaire.
Genzo
Modérateur
Modérateur


Post-BTS
Sexe: Sexe:Masculin
Messages: 1706
Localisation: Sartrouville (78)

MessagePosté le: Jeu 03 Aoû 2006 - 18:49 Répondre en citantRevenir en haut

Bonjour,

La requète renvoie 1 (true), et c'est tout à fait normal.
Quand tu fais un UPDATE sous PHPMyAdmin, il indique jamais si par exemple l'id du WHERE n'existe pas. Donc la requète SQL s'est effectuée correctement pour MySQL.
Si tu veux vérifier que les modifications ont été enregistrées, il faut faire un SELECT avant et après l'UPDATE, et de vérifier si les données ne correspondent plus (UPDATE aura donc bien été executée).

_________________
N'oubliez pas de mettre un avis sur votre lycée/centre de formation !!! Pensez aux futurs BTSiens. Merci Wink
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
Adrien
Accro à Web-IG
Accro à Web-IG


Post-BTS
Sexe: Sexe:Masculin
Messages: 125
Localisation: Ile-de-France

MessagePosté le: Jeu 03 Aoû 2006 - 22:02 Répondre en citantRevenir en haut

Je l'ai découvert au bout de quelques heures. Mieux vaut tard que jamais cela dit lol.
Bon moralité, mysql_affected chez pu quoi, permet de savoir combien de ligne ont été modifiée et de savoir si l'update a bien fonctionné ou non.
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailMSN MessengerNuméro ICQ
gosu
Newbiiiie
Newbiiiie




Messages: 6

MessagePosté le: Ven 04 Aoû 2006 - 03:10 Répondre en citantRevenir en haut

Ont peu aussi faire ceci :

$variable = mysql_query(blabla) or die(mysql_error());

Si la requete n'a pas eu lieu on arrete tou ( le die() ) et on affiche le message d'érreur avec mysql_error()


Ca évite de faire ceci :

Genzo a écrit:
Si tu veux vérifier que les modifications ont été enregistrées, il faut faire un SELECT avant et après l'UPDATE, et de vérifier si les données ne correspondent plus (UPDATE aura donc bien été executée).


Pourquoi faire 3 requete au lieu d'une seule ? :p
Voir le profil de l'utilisateurEnvoyer un message privé
Genzo
Modérateur
Modérateur


Post-BTS
Sexe: Sexe:Masculin
Messages: 1706
Localisation: Sartrouville (78)

MessagePosté le: Ven 04 Aoû 2006 - 12:03 Répondre en citantRevenir en haut

gosu a écrit:
Si la requete n'a pas eu lieu on arrete tou ( le die() ) et on affiche le message d'érreur avec mysql_error()

Le problème c'est que Mysql ne renvoie aucune erreur. Je viens de tester en mettant un id bidon pour une table existante, et ça ne m'affiche pas le die Wink

Et, en dehors de l'UPDATE, je raouterai un @ devant mysql_query, pour pas que l'user voit l'erreur sql.

Adrien a écrit:
Je l'ai découvert au bout de quelques heures. Mieux vaut tard que jamais cela dit lol.
Bon moralité, mysql_affected chez pu quoi, permet de savoir combien de ligne ont été modifiée et de savoir si l'update a bien fonctionné ou non.


Pour moi, mysql_affected_rows() est toujours égal à zéro, même si l'UPDATE s'est bien réalisé.

Edit : quoique, d'après la doc PHP, ça devrait fonctionner avec l'UPDATE.

_________________
N'oubliez pas de mettre un avis sur votre lycée/centre de formation !!! Pensez aux futurs BTSiens. Merci Wink
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
Adrien
Accro à Web-IG
Accro à Web-IG


Post-BTS
Sexe: Sexe:Masculin
Messages: 125
Localisation: Ile-de-France

MessagePosté le: Ven 04 Aoû 2006 - 13:42 Répondre en citantRevenir en haut

Non ça me semble correct. A l'usage ça fait bien ce que je souhaitais faire.
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailMSN MessengerNuméro ICQ
Genzo
Modérateur
Modérateur


Post-BTS
Sexe: Sexe:Masculin
Messages: 1706
Localisation: Sartrouville (78)

MessagePosté le: Ven 04 Aoû 2006 - 16:25 Répondre en citantRevenir en haut

Ok problème [résolu] alors Smile

_________________
N'oubliez pas de mettre un avis sur votre lycée/centre de formation !!! Pensez aux futurs BTSiens. Merci Wink
Voir le profil de l'utilisateurEnvoyer un message privéVisiter le site web du posteurMSN Messenger
Adrien
Accro à Web-IG
Accro à Web-IG


Post-BTS
Sexe: Sexe:Masculin
Messages: 125
Localisation: Ile-de-France

MessagePosté le: Ven 04 Aoû 2006 - 17:22 Répondre en citantRevenir en haut

Yes Wink
Voir le profil de l'utilisateurEnvoyer un message privéEnvoyer l'e-mailMSN MessengerNuméro ICQ
Montrer les messages depuis:      
Poster un nouveau sujetRépondre au sujet
 Sauter vers:   



Voir le sujet suivant
Voir le sujet précédent
Vous ne pouvez pas poster de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas voter dans les sondages de ce forum