Pregunta

Cuando intento llamar al procedimiento de almacenamiento en mysql que devuelve un conjunto de resultados, me sigue diciendo que " no puede devolver un conjunto de resultados en el contexto dado " ;.

Lo busqué en Google y algunos dijeron que es un error de mysql, algunos dijeron que debería cambiar su controlador de mysqli y ...

Situación:

Uso de la biblioteca de API de cliente del controlador mysqli versión 5.0.51a, PHP versión 5.2.4-2ubuntu5.6, uso del adaptador Mysqli Zend 1.9 RC 1.

¿Qué debo hacer ??

¿Fue útil?

Solución

No estoy seguro de que esta sea la solución a su problema, pero ¿qué hay de probar con una versión más reciente de PHP?
PHP 5.2.4 es definitivamente bastante antiguo, por lo tanto, si se trata de un error en el controlador mysqli de PHP, podría haberse corregido desde ...

En realidad, después de una búsqueda rápida, parece que se ha introducido un problema como el que está presenciando entre PHP 5.2.3 y PHP 5.2.4 (y todavía estaba aquí en PHP 5.2.5).
Vea error # 42548: PROCEDIMIENTO xxx no puede devolver un conjunto de resultados en el dado contexto (funciona en 5.2.3 !!)

¿Puedes probar con algo como PHP 5.2.9 o 5.2.10?
Sé que estos no son provistos por Ubuntu, incluso en la última versión estable de Ubuntu :-( Puede que tenga que compilar desde las fuentes :-(


Sin embargo, otra idea sería probar con el adaptador PDO_MySql: ¿tal vez funcionaría con ese?
¿Podría ser posible cambiar el adaptador sin causar demasiados problemas / sin tardar horas en probarlo?


Mientras trabaja con Zend Framework 1.9, aquí hay otra publicación que podría interesarle y podría ser más fácil de probar: error de procedimiento almacenado después de la actualización a 1.8

Una solución fácil de intentar sería volver a Zend Framework 1.7; ¿Sería posible para ti, solo probar?


En fin, buena suerte !
Y, si encuentra la solución, no olvide indicar cuál fue el problema y cómo lo resolvió ;-)

Otros consejos

La respuesta es actualizar tu php, acabo de actualizar el mío a 5.3.0, ¡y funciona como Candy!

Recientemente tuve este problema en un contrato. El cliente estaba usando una base de código en Windows y PHP 5.2.6 y mi instalación era Linux y PHP 5.3.1 Lo que hicimos, no cooperaron, así que al final me dieron una máquina Windows Vista e instalamos PHP 5.2 .6 y nos fuimos. Moraleja de la historia: las versiones coinciden. Cus raros Nunca tuve esto en ningún otro trabajo. Pero bueno, no puedes saberlo todo. Definitivamente no es un problema de MySql, solo PHP.

Funciona perfectamente con PHP 5.2.10 también.

Desde una versión anterior, he utilizado con éxito mysqli :: multi_query para llamar a un procedimiento problemático y obtener los resultados correctos.

Sé que esta pregunta es antigua, pero para aquellos que todavía trabajan con 5.2.4 y obtienen este error, puede considerar crear un nuevo objeto mysql PDO para solucionar este problema.

Todavía utilizo 5.2.4 en mi servidor de desarrollo para garantizar la compatibilidad con versiones anteriores de los complementos de WordPress que desarrollo.

A continuación hay un contenedor alrededor de las llamadas de procedimiento que utilizo para llamar con éxito los procedimientos en 5.2.4 (ejecutado en mi servidor dev), que normalmente me daría el error, y mi servidor de producción (que ejecuta una versión más nueva que no funciona). no dar el error).

Es específico para WordPress, pero no sería difícil modificarlo usando php directo.

/*
* Need to cache connection so we don't keep creating connections till we hit max.
*/

private 

Sé que esta pregunta es antigua, pero para aquellos que todavía trabajan con 5.2.4 y obtienen este error, puede considerar crear un nuevo objeto mysql PDO para solucionar este problema.

Todavía utilizo 5.2.4 en mi servidor de desarrollo para garantizar la compatibilidad con versiones anteriores de los complementos de WordPress que desarrollo.

A continuación hay un contenedor alrededor de las llamadas de procedimiento que utilizo para llamar con éxito los procedimientos en 5.2.4 (ejecutado en mi servidor dev), que normalmente me daría el error, y mi servidor de producción (que ejecuta una versión más nueva que no funciona). no dar el error).

Es específico para WordPress, pero no sería difícil modificarlo usando php directo.

<*>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); }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top