Query MYSQL interprété différemment par PHP ?
Fermé
mikis69
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
-
Modifié le 9 févr. 2019 à 18:06
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 11 févr. 2019 à 21:35
mikis69 Messages postés 168 Date d'inscription mardi 26 novembre 2013 Statut Membre Dernière intervention 11 février 2019 - 11 févr. 2019 à 21:35
A voir également:
- Query MYSQL interprété différemment par PHP ?
- Power query download - Télécharger - Tableur
- Easy php - Télécharger - Divers Web & Internet
- Mysql community server - Télécharger - Bases de données
- Get_magic_quotes_gpc php 8 ✓ - Forum PHP
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/lib/mysql/mysql.sock' (2) ✓ - Forum Linux / Unix
3 réponses
jordane45
Messages postés
38366
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
1 janvier 2025
4 720
9 févr. 2019 à 18:13
9 févr. 2019 à 18:13
Bonjour,,
PHP n’interprétè rien du tout.... il ne fait que lancer la requête... qui est exécutée par ta bdd... exactement de la même manière que lorsque tu passes par phpmyadmin ou n'importe quelle autre interface pour manipuler ta bdd
Dans ta procédure.. tu commence par vérifier la variable Nstatus ... d'où vient elle ??
As tu testé ta procédure directement dans ta bdd pour voir si le comportement n'était pas le même ??
PHP n’interprétè rien du tout.... il ne fait que lancer la requête... qui est exécutée par ta bdd... exactement de la même manière que lorsque tu passes par phpmyadmin ou n'importe quelle autre interface pour manipuler ta bdd
Dans ta procédure.. tu commence par vérifier la variable Nstatus ... d'où vient elle ??
As tu testé ta procédure directement dans ta bdd pour voir si le comportement n'était pas le même ??
mikis69
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
11 févr. 2019 à 17:58
11 févr. 2019 à 17:58
Après une recherche très approfondie dans mon code, j'ai remarqué en ajoutant un insert dans ma procédure que cette dernière est exécutée deux fois (car deux inserts dans la table).
Pour régler mon soucis, j'ai mis un garde fou en début de procédure pour éviter de mettre à jour deux fois la ligne de la table 'orders' :
Cela résout en effet mon problème mais est-ce que quelqu'un sait pourquoi PHP exécute deux fois ma procédure MYSQL ?
et cette fonction est appelé à un seul endroit du code :
-> j'appelle cette fonction lorsque la page 'acceptedPayment' est chargée. J'ai également un RewriteRule sur cette page..
Voilà toutes les informations que je possède.. J'aimerai réglé le soucis plus proprement donc si quelqu'un a une idée :p
Pour régler mon soucis, j'ai mis un garde fou en début de procédure pour éviter de mettre à jour deux fois la ligne de la table 'orders' :
CREATE DEFINER=`root`@`localhost` FUNCTION `FINALIZEORDER`(`NpayId` VARCHAR(200), `Nstatus` VARCHAR(50), `Nid` INT) RETURNS int(11) BEGIN declare NfactureNbr varchar(20) DEFAULT null; declare nbr int; select count(*) into nbr from orders where id = Nid and finalized = 1; if nbr = 0 then if Nstatus = 'Payé' then select concat_ws('_', year(sysdate()), case when length(max(substr(factureNbr, 6) + 1)) is null then '001' else case when length(max(substr(factureNbr, 6) + 1)) < 3 then LPAD(max(substr(factureNbr, 6) + 1), 3, '0') else max(substr(factureNbr, 6) + 1) end end, 'W' ) into NfactureNbr from orders where year(sysdate()) = substr(factureNbr, 1, 4); end if; update orders set createdOn = curdate(), paidOn = curdate(), status = Nstatus, finalized = 1, paymentReference = NpayId, factureNbr = NfactureNbr where id = Nid; end if; return 1; END
Cela résout en effet mon problème mais est-ce que quelqu'un sait pourquoi PHP exécute deux fois ma procédure MYSQL ?
public function finalizeOrder($payid, $status, $fkOrder) { $query = "select finalizeorder (:paymentreference, :status, :fkOrder) as retour"; try { $statement = $this->_db->prepare($query); $statement->bindValue(":paymentreference", $payid, PDO::PARAM_STR); $statement->bindValue(":status", $status, PDO::PARAM_STR); $statement->bindValue(":fkOrder", $fkOrder, PDO::PARAM_INT); $statement->execute(); $data = $statement->fetch(); return true; } catch (PDOException $e) { // Logguer le fait que la commande n'a pas pu être finalisé return false; } }
et cette fonction est appelé à un seul endroit du code :
$finalized = $mg->finalizeOrder($payid, $statusOrder, $orderid);
-> j'appelle cette fonction lorsque la page 'acceptedPayment' est chargée. J'ai également un RewriteRule sur cette page..
Voilà toutes les informations que je possède.. J'aimerai réglé le soucis plus proprement donc si quelqu'un a une idée :p
Utilisateur anonyme
11 févr. 2019 à 20:07
11 févr. 2019 à 20:07
Bonsoir
Il n'y a aucun doute : si PHP exécute deux fois ta procédure, c'est que tu l'appelles deux fois. Montre le code de la page qui appelle finalizeOrder.
Il n'y a aucun doute : si PHP exécute deux fois ta procédure, c'est que tu l'appelles deux fois. Montre le code de la page qui appelle finalizeOrder.
mikis69
Messages postés
168
Date d'inscription
mardi 26 novembre 2013
Statut
Membre
Dernière intervention
11 février 2019
11 févr. 2019 à 21:35
11 févr. 2019 à 21:35
Je posterai le code demain matin. J'ai mis des var_dump partout et ils ne sont affichés qu'une seule fois.
C'est comme ci, la page se chargeait une premiere fois et ensuite se re-charger une deuxième fois.. (d'où le fait que je ne le vois pas avec les var_dump et que je le vois avec des inserts)
Merci pour ta réponse, je poste le code complet demain en edit sur ma précédente réponse.
C'est comme ci, la page se chargeait une premiere fois et ensuite se re-charger une deuxième fois.. (d'où le fait que je ne le vois pas avec les var_dump et que je le vois avec des inserts)
Merci pour ta réponse, je poste le code complet demain en edit sur ma précédente réponse.
9 févr. 2019 à 19:01
Oui j'ai pas mis toute la procédure mais la variable Nstatus vient du même endroit que Nid.
J'ai testé ma procédure sur MYSQL et elle fonctionne de la bonne manière. Il n y a que lorsque je passe par mon site internet que cela ne fonctionne pas.
Si par exemple dans le concat, je remplace year(sysdate()) par '2019' cela va fonctionner.. Je ne sais pas si tu vois le problème ?
La procédure s'exécute bien et sans aucunes erreurs. Juste la valeur dans la colonne après l update qui n est pas bonne.