Bonjour tout le monde
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 :
- CREATE PROCEDURE `test`(
- p_name VARCHAR(155))
- BEGIN
- INSERT INTO test (name) VALUES (p_name);
- SELECT last_insert_id() AS Result;
- END
|
Côté PHP, j'ai le code suivant :
Code :
- $db = new PDO("mysql:host=192.168.1.200;port=3307;dbname=mbd","root","password" );
- $db->beginTransaction();
- $query = $db->prepare("CALL test (?)" );
- $query->bindValue(1, 'blablabla', PDO::PARAM_STR);
- $query->execute();
- $db->commit();
- $result = $res->fetchAll(PDO::FETCH_ASSOC);
- if (is_array($result)&&count($result)>0)
- 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 :
- $db->query("CALL test ('blablabla')";
|
Ça fonctionne aussi...
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