Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1227 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] PHP, PDO, transactions et procédures stockées

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[Résolu] PHP, PDO, transactions et procédures stockées

n°2335259
matheo265
Posté le 15-06-2019 à 21:58:46  profilanswer
 

Bonjour tout le monde  :hello:  
 
J'ai un soucis avec php et l'extension pdo. J'ai bien cherché sur divers topics ou sur google mais je n'arrive pas à trouver d'informations pour m'aider.
 
Je suis sur MySQL et j'ai une procédure toute simple :
 

Code :
  1. CREATE PROCEDURE `test`(
  2.     p_name VARCHAR(155))
  3. BEGIN
  4.     INSERT INTO test (name) VALUES (p_name);
  5.     SELECT last_insert_id() AS Result;
  6. END


 
Côté PHP, j'ai le code suivant :
 

Code :
  1. $db = new PDO("mysql:host=192.168.1.200;port=3307;dbname=mbd","root","password" );
  2. $db->beginTransaction();
  3. $query = $db->prepare("CALL test (?)" );
  4. $query->bindValue(1, 'blablabla', PDO::PARAM_STR);
  5. $query->execute();
  6. $db->commit();
  7. $result = $res->fetchAll(PDO::FETCH_ASSOC);
  8. if (is_array($result)&&count($result)>0)
  9. echo "ID=".$result[0]["Result"];


 
J'ai supprimé les contrôles de mon code pour simplifier l'exemple.
 
Lorsque j'exécute ma page PHP, tout se passe bien : la transaction se lance, la requête est exécutée, ma transaction est validée et j'ai bien mon ID qui s'affiche. A chaque actualisation de ma page, mon ID s'incrémente, signe que mon autoincrement dans la base fonctionne.
 
Et pourtant ! Je n'ai strictement aucun enregistrement dans ma table `test` ! Pourtant, si j'exécute le même bout de code sans transaction ça fonctionne. Idem côté Mysql : si je fais appel à ma procédure, ça fonctionne aussi. Si je garde les transactions PDO mais qu'à la place d'une requête préparées j'utilise ça :
 

Code :
  1. $db->query("CALL test ('blablabla')";


 
Ça fonctionne aussi...  :pt1cable:  
 
Alors quoi ? Une incompatibilité avec les transactions, les requêtes préparées et mysql ?  
 
Quelqu'un a une idée de l'origine de ce problème ?  
 
Merci pour vos retours  :)


Message édité par matheo265 le 16-06-2019 à 12:01:45
mood
Publicité
Posté le 15-06-2019 à 21:58:46  profilanswer
 

n°2335260
matheo265
Posté le 15-06-2019 à 22:39:27  profilanswer
 

Un élément intéressant que je viens juste de découvrir.  
 
Depuis PHP, si après avoir validé ma transaction je fais un "SELECT * FROM" j'ai bien mon enregistrement qui s'affiche.
 
Par contre si je me déconnecte puis que je recréé un objet PDO
 

Code :
  1. $db = null;
  2. $db = new PDO(...


 
ben là plus aucune trace des enregistrements  :??:  C'est comme si les modifications que je faisais étaient volatiles et qu'une fois la connexion coupée ils disparaissaient :heink:

n°2335263
matheo265
Posté le 15-06-2019 à 23:17:30  profilanswer
 

J'ai trouvé une solution... J'ai remplacé les lignes suivantes :
 

Code :
  1. $db->beginTransaction();
  2. $db->commit();


 
Par :
 

Code :
  1. $db->query("BEGIN;" );
  2. $db->query("COMMIT;" );


 
Et ça fonctionne. Alors pour le serveur, après vérification, c'est du MariaDB... Mais bizarre car ça reste du MySQL...  
 
Je vais m'en contenter ^^ Mais si je pouvais au moins comprendre ça m'aiderait bien  :D  


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  [Résolu] PHP, PDO, transactions et procédures stockées

 

Sujets relatifs
Envoi de SMS via une appli PHP[PHP] Quel router choisir?
PHP Trier un fichier csv volumineuxPassage de paramètre du PHP au Javascript
Recherche script PHP pour créer des bases de donnéesTrace du mail envoyé avec PHP
Variables dynamiques à partir de PHP 7Je veux envoyer un email avec PHP
Exécuter une fonction en PHP avec un bouton HTMLReconversion intensive en PHP
Plus de sujets relatifs à : [Résolu] PHP, PDO, transactions et procédures stockées


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR