Bonjour,
J'ai un comportement étrange dans l'exécution de mon programme.
Le framework ou php, je ne sais pas trop, exécute les lectures et écritures dans un ordre incorrect.
Pour expliquer, rien de mieux que l'exemple, (code simplifié à l’extrême, excusez les éventuelles erreurs de syntaxe) :
Code situation avec problème : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public function ajouterarticlepanier() { $ligneEcrire = $this->Article->query('INSERT INTO panier (article) VALUES ('toto'); return $this->GetPanier()); } public function GetPanier() { $total = $this->Article->query('SELECT COUNT(*) AS nb FROM panier'); $nb = 0; if ($total) then { $nb = total['nb']; } return $nb; }
Code situation fonctionnelle : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public function ajouterarticlepanier() { $ligneEcrire = $this->Article->query('INSERT INTO panier (article) VALUES ('toto'); $total = $this->Article->query('SELECT COUNT(*) AS nb FROM panier'); $nb = 0; if ($total) then { $nb = total['nb']; } return $nb; }
Dans le premier cas, la fonction ajouterarticlepanier me renvoie la valeur du "tour" précédent.
C'est à dire
- Au premier appel : 0 article
- Au second appel : 1 article
- au troisième appel : 2 articles
Dans le second cas, la fonction ajouterarticlepanier me renvoie la bonne valeur.
C'est à dire
- Au premier appel : 1 article
- Au second appel : 2 articles
- au troisième appel : 3 articles
Comment expliquez-vous cette différence, et surtout, comment forcer cake ou php a exécuter les requêtes dans l'ordre.
Pistes déjà tentées
- Timer de trois secondes entre l'insert et le l'appel de fonction : ne marche pas
- $datasource->begin() et $datasource->commit() entourant la requête d'insertion : ne marche pas
- BEGIN; et COMMIT; dans le code SQL appelé : ne marche pas.
Partager