Page 1 sur 1

php 5.2.6 et MySQL

Posté : 17 sept. 2008, 13:23
par Laur
Bonjour,
Je rencontre un problème avec une procédure mysql et php V 5.2.6, que je n'arrive pas à résoudre.
Avec php v 5.2.0, je n'ai pas ce problème.
Avec php v 5.2.6, la procédure s'exécute normalement et j'obtiens les résultats escomptés.
Par contre, si j'effectue une requête suivante telle que query,
j'obtiens avec MySQLi le message:
<Error: 2014 => Commands out of sync; you can't run this command now>
j'obtiens avec PDO le message: (PDO::MYSQL_ATTR_USE_BUFFERED_QUERY est bien TRUE)
<Error: 2014 => Cannot execute queries while other unbuffered queries are active.
Consider using PDOStatement::fetchAll(). Alternatively,
if your code is only ever going to run against mysql,
you may enable query buffering by setting the PDO::MYSQL_ATTR_USE_BUFFERED_QUERY attribute>

Par contre, si je remplace l'utilisation de ma procédure par une requête
"SELECT code_postal , commune from codes_postaux_france WHERE code_postal LIKE p1 ORDER BY code_postal, commune;"
Tout se déroule normalement et je peux effectuer une reqête suivante telle que 'query'!

listing de ma procédure:
DROP PROCEDURE IF EXISTS get_commune//
CREATE PROCEDURE get_commune (IN p1 varchar(5))
BEGIN
SELECT code_postal , commune from codes_postaux_france WHERE code_postal LIKE p1 ORDER BY code_postal, commune;
END//

Si vous pouviez m'apporter vos lumières? Pierre Laur

Posté : 17 sept. 2008, 13:44
par Truc
Modération :
Afin d'obtenir plus de réponses, le sujet est déplacé dans le forum "PHP avancé".

Merci de prendre le temps de lire les règlements
ainsi que l'intitulé de chaque forum avant de poster un nouveau sujet.

php 5.2.6 et mysql

Posté : 29 sept. 2008, 15:46
par Laur
Bonjour,
Il semblerait qu'après un appel de procédure stockée qui renvoie un jeu de résultats,
mysql renvoie un supplément d'informations!
Pour ceux qui rencontreraient le même problême, j'ai trouvé une solution pour MySQLi.
Il faut appeler la fonction, ci-dessous décrite, pour libérer la mémoire tampon.
function ClearUnbuffer($Object_MySQLi)
{  while ($ObjectMySQLi->next_result())
   {  if (is_object($result = $ObjectMySQLi->store_result()))
         $result->free_result;
   }
}
Pour PDO, je n'ai pas trouvé de fonctions qui permettent de faire la même épuration!

Posté : 29 sept. 2008, 17:19
par Truc
merci pour ton retour :pouce: