Foros del Web » Programando para Internet » PHP »

php no muestra la consulta de un procedimiento almacenado.

Estas en el tema de php no muestra la consulta de un procedimiento almacenado. en el foro de PHP en Foros del Web. Estimados, Tengo el siguiente problema. Al ejecutar el siguiente procedimiento almacenado en workbench, me envia los resultados sin problema: begin select @num_bought := cast(sum(Cantidad_salida) as ...
  #1 (permalink)  
Antiguo 14/02/2015, 21:34
 
Fecha de Ingreso: febrero-2015
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
php no muestra la consulta de un procedimiento almacenado.

Estimados,

Tengo el siguiente problema.
Al ejecutar el siguiente procedimiento almacenado en workbench, me envia los resultados sin problema:
begin
select
@num_bought := cast(sum(Cantidad_salida) as unsigned) as units
from movimiento_stock inner join producto
where Nombre_de_producto = "arroz";
select
@expense := cast(sum(expense) as unsigned) as expense,
sum(units) as units
from (select
Precio_entrada * least(@num_bought, Cantidad_entrada) as expense,
least(@num_bought, Cantidad_entrada) as units,
@num_bought := @num_bought - least(@num_bought, Cantidad_entrada)
from movimiento_stock inner join producto
where Nombre_de_producto= "arroz" and @num_bought > 0
) as a;
end $

Pero en php, sólo me imprime el valor de UNITS, pero no de EXPENSE, en total expense aparece en blanco.

total 901456
Notice: Undefined index: expense in C:\xampp\htdocs\inventario\fifo.php on line 15
total

el codigo php es el siguiente:

<?php

//connect to database
$connection = mysqli_connect("localhost", "root", "", "novotey");

//run the store proc
$result = mysqli_query($connection,
"CALL costo") or die("Query fail: " . mysqli_error());

//loop the result set
while ($row = mysqli_fetch_array($result)){
echo "total ".$row['units'];
echo "total ".$row['expense'];
}

?>

hace unos dias hice la misma pregunta y yo estaba trabajando con mysql y me recomendaron cambiarme a mysqli, pero el problema persiste
  #2 (permalink)  
Antiguo 14/02/2015, 22:44
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: php no muestra la consulta de un procedimiento almacenado.

Este tema ya lo preguntaste en otro post. No abras nuevos, continúa con el anterior.

Es probable que haya errores en el SP, pero eso no tiene ya relación con este foro.
Deberías consultar en el de MySQL, ya que es el especializado.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 15/02/2015, 05:15
 
Fecha de Ingreso: febrero-2015
Mensajes: 4
Antigüedad: 9 años, 2 meses
Puntos: 0
Respuesta: php no muestra la consulta de un procedimiento almacenado.

Estimado,

Disculpa por abrir otro tema, pero el post anterior esta mal planteada la pregunta.
El proc almacenado esta correcto mi problema es con php

saludos gracias
  #4 (permalink)  
Antiguo 15/02/2015, 08:47
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: php no muestra la consulta de un procedimiento almacenado.

Cita:
El proc almacenado esta correcto mi problema es con php
Puede no ser necesariamente cierto. El hecho de que no puedas acceder a un dato que supuestamente el SP está obteniendo, me hace sospechar de que hay un error de ejecución en el SP.
El SP, para ser válido, debe devolver datos en todas las ocasiones, o bien devolver un error. Cuando no devuelve ni lo uno ni lo otro, entonces hay un problema con los datos que se validan, con el rpcoesamientos de esos datos, o con los resultados de los mismos, que PHP no puede manejar.
Personalmente sospecho del uso de las variables de usuario de MySQL que estás poniendo en el SP, ya que a menos que domines conceptualmente esas variables propias de MySQL, pueden dar lugar a resultados erróneos o inesperados.

Respecto a la sugerencia de cambiar la librería de acceso MYSQL a MYSQLI, te la di yo, y te expliqué la razón: la librería MYSQL, además de obsoleta, no maneja los resultados de consultas como salida de un SP, y eso es un problema ampliamente documentado.

Yendo al punto del SP, que aqui pongo un poco mas limpio:

Código MySQL:
Ver original
  1. delimiter $$
  2.     SELECT @NUM_BOUGHT := CAST(SUM(Cantidad_salida) AS UNSIGNED) AS units
  3.     FROM movimiento_stock INNER JOIN producto
  4.     WHERE Nombre_de_producto = "arroz";
  5.     SELECT @EXPENSE := CAST(SUM(expense) AS UNSIGNED) AS expense, SUM(units) AS units
  6.     FROM
  7.         (SELECT
  8.             Precio_entrada * LEAST(@NUM_BOUGHT, Cantidad_entrada) AS expense,
  9.             LEAST(@NUM_BOUGHT, Cantidad_entrada) AS units,
  10.             @NUM_BOUGHT := @NUM_BOUGHT - LEAST(@NUM_BOUGHT, Cantidad_entrada)
  11.         FROM movimiento_stock INNER JOIN producto
  12.         WHERE Nombre_de_producto= "arroz" AND @NUM_BOUGHT > 0
  13.         ) AS a;
  14. END$$
  15.  
  16. delimiter ;
Yo le veo ciertos riesgos a la ejecución usando ese tipo de variables.
¿tienes claro que entre esta linea:?
Código MySQL:
Ver original
  1. Precio_entrada * LEAST(@NUM_BOUGHT, Cantidad_entrada) AS expense,
y esta otra:
Código MySQL:
Ver original
  1. @NUM_BOUGHT := @NUM_BOUGHT - LEAST(@NUM_BOUGHT, Cantidad_entrada)
el contenido de de @NUM_BOUGHT puede tener dos valores diferentes, y con eso esta otra líea:
Código MySQL:
Ver original
  1. WHERE Nombre_de_producto= "arroz" AND @NUM_BOUGHT > 0
podría estar realizando la evaluacion del AND en base a un valor diferente al registro anterior?

Esa es una características de las variables de usuario en MySQL: cada asignación, incluso en la misma SELECT, puede cambiar el valor de la variable.

La verdad es que sin probar con datos reales es difícil saber si esa query realmente funciona bien, más allá de que con algunas pruebas los resultados puedan ser correctos. Como dije, si al menos en un caso no da lo que se espera, entonces el SP está mal.


Posdata: Usa los highlight para poner el código. Para eso se pusieron, leer todo eso como texto plano es molesto y confuso.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 15/02/2015 a las 09:04

Etiquetas: muestra, mysql, procedimiento, select
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:49.