Comunidad de diseño web y desarrollo en internet online

error al ejecutar procediiento almacenado desde php

Citar            
MensajeEscrito el 04 May 2010 04:22 am
hola estimados, tengo un error al ejecutar un procedimiento desde php, el error ocurre tanto en mi sistema como en phpmyadmin, sin embargo desde el cliente mysql no tengo problemas

el error que me arroja es el siguiente

Código :

PROCEDURE basededatos.miPerfil can't return a result set in the given context

la consulta que ejecutoes la siguiente

Código MySQL :

CALL miPerfil( $id_usr, $id_cam);


y por si interesa el procedimiento almacenado es este

Código MySQL :

DELIMITER $$

DROP PROCEDURE IF EXISTS `miPerfil`$$
CREATE PROCEDURE miPerfil(IN idUsr INT, idCam INT)
BEGIN
DECLARE nCupones INT;
DECLARE id_sup INT;
DECLARE id_inf INT;

SELECT COUNT(c.`id_cup`) INTO nCupones FROM `users` u
INNER JOIN  cupones c ON u.`rut` = c.`RUT` AND c.`id_cam` = idCam
WHERE `id_usr` = idUsr AND c.`activo` = 1
GROUP BY c.`RUT`;

SELECT  `id_usr`  INTO id_sup  FROM `users` u
INNER JOIN  cupones c ON u.`rut` = c.`RUT` AND c.`id_cam` = idCam
WHERE c.`activo` = 1
GROUP BY c.`RUT` HAVING COUNT(c.`id_cup`) > nCupones
ORDER BY cupones ASC LIMIT 0,1;

SELECT  `id_usr`  INTO id_inf  FROM `users` u
INNER JOIN  cupones c ON u.`rut` = c.`RUT` AND c.`id_cam` = idCam
WHERE c.`activo` = 1
GROUP BY c.`RUT` HAVING COUNT(c.`id_cup`) < nCupones
ORDER BY cupones ASC LIMIT 0,1;

SELECT
u.`nombre` nombre,
u.`appaterno` appaterno,
u.`apmaterno` apmaterno,
COUNT(c.`id_cup`) cupones,
ROUND(SUM(m.`monto`)/ COUNT(c.`id_cup`))  monto,
ROUND(COUNT(m.`id_man`)/ COUNT(c.`id_cup`)) mandatos
FROM `users` u
INNER JOIN  cupones c ON u.`rut` = c.`RUT` AND c.`id_cam` = idCam AND c.`activo` = 1
INNER JOIN `mandatos` m ON u.`rut` = m.`captadorRut`
WHERE u.`id_usr` = idUsr
OR u.`id_usr` =id_sup
OR u.`id_usr` =id_inf
GROUP BY  u.`id_usr`
ORDER BY cupones DESC;

END$$

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 04 May 2010 04:27 am
mysql_query no puede manejar muchos resultados, en español, no puede ejecutar muchos selects en un mismo query. intenta con uno y deberia funcionarte.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2010 04:30 am
yo solo ejecuto

Código PHP :

$sql="CALL miPerfil( $id_usr, $id_cam);";

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 04 May 2010 04:35 am
eh pero en el store procedure estás ejecutando muchos selects

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2010 04:41 am
pero los 3 primeros SELECT no son para emitir resultados ¿hay alguna forma de que no se muestren y asi evitar que php se confunda ??

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 04 May 2010 04:49 am
si uso FUNCTION y dentro de la funcion ejecuto el(los) SELECT que necesito dentro del procedimiento ¿ahi si se contaria como 1 solo SELECT dentro del procedimiento?

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox
Citar            
MensajeEscrito el 04 May 2010 04:58 am
puedes utilizar mysqli?

tiene mejores funciones para estos casos...

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2010 05:03 am
El hecho es que ese procedure no retorna nada y mysql_query no sabe como manejarlo, ese es el error que te da.

saludos

Por Maikel

BOFH

5575 de clabLevel

22 tutoriales
5 articulos

Genero:Masculino   Team Cristalab

Claber de baja indefinida

firefox
Citar            
MensajeEscrito el 04 May 2010 05:31 pm

MySQL 5.0 Reference Manual escribió:

Los comandos que retornan un conjunto de resultados no pueden usarse desde una función almacenada. Esto incluye comandos SELECT que no usan INTO para tratar valores de columnas en variables, comandos SHOW y otros comandos como EXPLAIN. Para comandos que pueden determinarse al definir la función para que retornen un conjunto de resultados, aparece un mensaje de error Not allowed to return a result set from a function (ER_SP_NO_RETSET_IN_FUNC). Para comandos que puede determinarse sólo en tiempo de ejecución si retornan un conjunto de resultados, aparece el error PROCEDURE %s can't return a result set in the given context (ER_SP_BADSELECT).


Creo que te falta definir las variables que devolverán tus resultados como tipo OUTPUT, pero no estoy seguro como funciona para varios registros.

Maikel escribió:

Y creo que es problema es que

El hecho es que ese procedure no retorna nada y mysql_query no sabe como manejarlo, ese es el error que te da.

saludos


Si se supone que deben retornar si checas la última consulta.

El Maikel y sus prisas. jeje.

Por Darel

725 de clabLevel

5 tutoriales

 

I'm a human

chrome
Citar            
MensajeEscrito el 04 May 2010 06:31 pm
ok, gracias, por el dato Darel, vere como darle variables con OUT

si logro resolver esto pongo la consulta aca par finalizar la novela :P

Por Inyaka

Claber

3176 de clabLevel

9 tutoriales
2 articulos

Genero:Masculino   Desarrollador de GAIA

Programador y fotógrafo

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.