Quand j'essaie jamais d'appeler la procédure de stockage dans MySQL qui renvoie un ensemble de résultats, il continue à me dire que "ne peut pas renvoyer une définition de résultats dans le contexte donné". P>
J'ai Google It et certains ont dit que c'est un bogue MySQL, certains ont dit que vous devriez changer votre pilote MySQLI et .... p>
Situation: p>
Utilisation de la bibliothèque d'API client de pilote MySQLI Version 5.0.51A, PHP Version 5.2.4-2Buntu5.6, Utilisation de l'adaptateur MySQLI de Zend 1.9 RC 1. P>
Que dois-je faire!? P>
5 Réponses :
Je ne sais pas que c'est la solution à votre problème, mais qu'en est-il d'essayer une version plus récente de PHP?
PHP 5.2.4 est définitivement assez ancienne. Donc, si c'est un bogue dans le pilote MySqli de PHP, cela aurait peut-être été corrigé depuis ... P>
En fait, après une recherche rapide, il semble qu'un problème comme celui que vous assiste a été introduit entre PHP 5.2.3 et PHP 5.2.4 (et était toujours ici dans PHP 5.2.5). Voir BOGUE # 42548: Procédure XXX ne peut pas renvoyer une définition de résultats dans la donnée donnée. Contexte (fonctionne en 5.2.3 !!) p>
Êtes-vous capable de tester avec quelque chose comme PHP 5.2.9 ou 5.2.10?
Je sais que ceux-ci ne sont pas fournis par Ubuntu, même dans la dernière version d'Ubuntu Stable :-( Vous pourriez avoir à compiler des sources: - ( P>
Une autre idée serait d'essayer l'adaptateur Mith PDO_MYSQL: Peut-être que cela fonctionnerait avec celui-ci?
Il serait peut-être possible de modifier l'adaptateur sans causer trop de problèmes / sans prendre des heures à tester? p>
Comme vous travaillez avec Zend Framework 1.9, voici un autre message qui pourrait vous intéresser, et pourrait être plus facile à tester: Erreur de procédure stockée après la mise à niveau vers 1.8 P>
Une solution facile à essayer de retourner à Zend Framework 1.7; Serait-ce possible pour vous, juste pour tester? p>
De toute façon bonne chance !
et, si vous trouvez la solution, n'oubliez pas d'indiquer quel était le problème et comment vous l'avez résolu; -) p>
Ce problème pourrait-il revenir en 5.2.17? Je reçois la même erreur, mais Centos PHP version ultérieure.
Probablement un autre problème, car j'ai trouvé un problème similaire à la version 5.3.1 en utilisant Xampp et Windows
La réponse est de mettre à niveau votre PHP, je viens de mettre à niveau le mien vers 5.3.0, et c'est des œuvres aime les bonbons! p>
Merci d'avoir donné la solution que vous choisissez :-) (Méfiez-vous: utiliser PHP 5.3 pourrait conduire à d'autres problèmes ailleurs dans votre code, car il apporte beaucoup de nouvelles choses ^^)
J'ai eu ce problème récemment sur un contrat. Le client utilisait un codeBase sur Windoze et PHP 5.2.6 et mon installation était Linux et PHP 5.3.1 Tout ce que nous le faisions, ils ne coopéreraient pas à la fin, ils m'ont donné une machine Vista Windoze et nous avons installé PHP 5.2 .6 Et off, nous sommes allés. Morale de l'histoire: version de la version correspondante. Cus bizarres, je n'ai jamais eu cela jamais auparavant dans aucun autre emploi. Mais bon, tu ne peux pas tout savoir. Très certainement pas un problème mysql, juste php. P>
J'étais battu pour obtenir ce problème sur PHP 5.2.6 lorsque vous essayez de déployer un système développé sur un serveur de développement PHP 5.3. Je vais donc devoir passer. Notez qu'il existe Problèmes d'incompabilité en arrière .
@Grubber,? Il y a toujours des problèmes incompact. Qu'est-ce qui est si spécial à propos de ces versions?
Cela fonctionne parfaitement avec PHP 5.2.10. P>
à partir d'une version antérieure, j'ai utilisé avec succès MySQLI :: Multi_Query pour appeler une procédure problématique et obtenir les bons résultats. P>
Je sais que cette question est ancienne, mais pour ceux qui travaillent toujours avec 5.2.4 et à obtenir cette erreur, vous pouvez envisager de créer un nouvel objet PDO MySQL pour contourner ce problème.
J'utilise toujours 5.2.4 sur mon Dev Server pour assurer une compatibilité rédaction pour les plugins WordPress que je développe. P>
ci-dessous est une enveloppe autour des appels procéduraux que j'utilise pour apporter des procédures d'appel avec succès dans 5.2.4 (Exécutez sur mon serveur de devir), qui serait normalement Donnez-moi l'erreur et mon serveur de production (qui exécute une version plus récente qui ne donne pas l'erreur). p>
Son WordPress spécifique, mais il ne serait pas difficile de le modifier à l'aide de PHP droit. P>
/* * Need to cache connection so we don't keep creating connections till we hit max. */ private $_dbhCache=null; /** * mySQL Call Proc * * Provides a wrapper around calling a mySQL stored procedure to ensure against a 5.2.4 bug that * causes procedure calls to fail. * Error:'can't return a result set in the given context' * * references: * http://stackoverflow.com/questions/1200193/cant-return-a-result-set-in-the-given-context * http://php.net/pdo_mysql#69592 //i got empty result set but pointed me in the right direction * http://php.net/pdo_mysql#80306 //this worked, but returned 0-indexed and assoc, i edited it so it only returns assoc mimicking $wpdb->get_results( * http://www.php.net/manual/en/pdo.connections.php * http://www.php.net/manual/en/pdostatement.fetch.php explains about FETCH_ASSOC * * @param string $proc The mySQL stored procedure string, including paramaters, but without the call statement. e.g.: "my_procedure_name('my_paramater')"; * @return string The results of the procedure call */ public function mySQLCallProc( $proc ) { global $wpdb; $query = "call $proc"; try { /* * Attempt to call the procedure normally. * */ $query_result = $wpdb->get_results( $query, ARRAY_A ); /* * Check for a database error * and throw an exception if one is found. * We can then attempt it again using a workaround. */ if ( $wpdb->last_error !== '' ) { throw new Exception( 'Database Error While Calling Procedure' ); } } catch ( Exception $e ) { try { /* * Create a PDO Object for the connection */ if ( is_null($this->_dbhCache)) { $dbh = new PDO( 'mysql:host=' . DB_HOST . ';port=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASSWORD, array( PDO::ATTR_PERSISTENT => true ) ); $this->_dbhCache=$dbh ; }else{ $dbh = $this->_dbhCache; } /* * Prepare and call the procedure. */ $stmt = $dbh->prepare( "call $proc" ); $stmt->execute(); /* * fetch all rows into an associative array. */ $query_result = $stmt->fetchAll( PDO::FETCH_ASSOC ); //FETCH_ASSOC gets results as an assoc array. without it, you'll receive both assoc and 0-indexed array } catch ( PDOException $e ) { print "Error!: " . $e->getMessage() . "<br/>"; die(); } } return ($query_result); }