Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] PHP OO Llamar procedimiento almacenado desde PHP

Estas en el tema de Llamar procedimiento almacenado desde PHP en el foro de PHP en Foros del Web. Hola amigos estoy intentando mandar a llamar un procedimiento almacenado en php y me sale el error de Warning: mysql_fetch_row() expects parameter 1 to be ...
  #1 (permalink)  
Antiguo 23/07/2014, 20:46
Avatar de Sidus  
Fecha de Ingreso: enero-2014
Ubicación: Puebla
Mensajes: 32
Antigüedad: 10 años, 3 meses
Puntos: 1
Pregunta Llamar procedimiento almacenado desde PHP

Hola amigos estoy intentando mandar a llamar un procedimiento almacenado en php y me sale el error de Warning: mysql_fetch_row() expects parameter 1 to be resource, boolean given, No se porque no me esta devolviendo ningun dato y en mysql todo va bien al ejecutar el procedimiento, les adjunto la imagen.
.
  #2 (permalink)  
Antiguo 23/07/2014, 22:11
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llamar procedimiento almacenado desde PHP

Parece que se produjo algún error al cargar la imagen porque no se muestra. Mejor usa el highlight de PHP y muéstranos la parte crítica del código.

Saludos
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #3 (permalink)  
Antiguo 23/07/2014, 22:58
Avatar de Sidus  
Fecha de Ingreso: enero-2014
Ubicación: Puebla
Mensajes: 32
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Llamar procedimiento almacenado desde PHP

Dejo el link para que se vea la imagen:
https://public.dm2301.livefilestore.com/y2pB20AkD1asK4sNsYSNtKYNpsWHS40PiDWAzrr2IJKOd7BACC oRVdXl0n9vdXl9PvXCDOjTQLalHAaJ5WPLAvIJaKHddLzVyWdC DStQnzInJ4/error.jpg?psid=1
  #4 (permalink)  
Antiguo 23/07/2014, 23:01
Avatar de Alexis88
Philosopher
 
Fecha de Ingreso: noviembre-2011
Ubicación: Tacna, Perú
Mensajes: 5.552
Antigüedad: 12 años, 5 meses
Puntos: 977
Respuesta: Llamar procedimiento almacenado desde PHP

Pues yo sigo sin poder ver la imagen. Por si a caso, el colocar código acá es gratis y válido , pero no olvides usar el highlight de PHP.
__________________
«Juro por mi vida y mi amor por ella, que jamás viviré para el provecho de otro hombre, ni le pediré a otro hombre que viva para el mío».

Ayn Rand
  #5 (permalink)  
Antiguo 24/07/2014, 06:46
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, 5 meses
Puntos: 2658
Respuesta: Llamar procedimiento almacenado desde PHP

Por empezar, te recomiendo que postees aquí el código que tienes, y no que postees imágenes.
Es más claro y sencillo para poder trabajar sobre lo que realmente tienes en el script.

Por lo demás, estás cometiendo el clásico y difundido error de asumir que la ejecución funciona bien. Y eso es algo que JAMÁS debes dar por sentado.
Como mínimo deberías validar que la query se haya ejecutado sin errores, usando "or die()":
Código PHP:
Ver original
  1. $result = mysql_query($sql, $conex) or die("Error al ejecutar el procedimiento: ".mysql_error());

Por otra parte te comento que si ese SP debe devolver una tabla de resultados, la librería MYSQL no es la versión adecuada. Deberías usar la MYSQLI, ya que la otra (además de obsoleta), no puede devolver resultados en ese contexto.
__________________
¿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; 24/07/2014 a las 07:21
  #6 (permalink)  
Antiguo 27/07/2014, 02:01
Avatar de Sidus  
Fecha de Ingreso: enero-2014
Ubicación: Puebla
Mensajes: 32
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Llamar procedimiento almacenado desde PHP

Les comparto el codigo para que se pueda apreciar el codigo mejor el procedimiento que estoy intentando llamar es un simpel select * from tabla

Código PHP:
Ver original
  1. Archivo consulta_allmemo.php
  2. <form method="post">
  3. <?php
  4. include 'conexion.php';
  5. include 'config_server.php';
  6. $objeto = new conexion(); //Se instancia la clase conexion
  7. $conex = $objeto ->conecta(); //Se utiliza el mEtodo conecta
  8. $sql = "CALL all_memorandum;"; //procedimiento
  9. $result = mysql_query($sql, $conex);
  10. echo "<table class='table table-condensed table-hover'>";
  11.                             echo "<thead>";
  12.                             echo "  <tr bgcolor='#DFF2BF'>";
  13.                             echo "      <th align='center'>No. Memorandum</th>";
  14.                             echo "      <th align='center'>Fecha</th>";
  15.                             echo "      <th align='center'>Area</th>";
  16.                             echo "      <th>Director/a</th>";
  17.                             echo "      <th>CCP</th>";
  18.                             echo "      <th>Acciones</th>";
  19.                             echo "  </tr>";
  20.                             echo "</thead>";
  21.                            
  22. while ($row = mysql_fetch_row($result)) {
  23.                             echo "<tbody>";
  24.                             echo "<tr bgcolor='#DDDDDD'>";
  25.                                 echo "<td>" . $row[0] . "</td>";
  26.                                 echo "<td>" . $row[1] . "</td>";
  27.                                 echo "<td>" . $row[2] . "</td>";
  28.                                 echo "<td>" . $row[3] . "</td>";
  29.                                 echo "<td>" . $row[4] . "</td>";
  30.                                 echo "<td><button type='button' class='btn-pdf'></button>
  31.                                 <button type='button' class='btn-eliminar'>Remover</button></td>";
  32.                                
  33.                                 echo "</tr>";
  34.                                 echo "</tbody>";
  35.                                 }
  36.                             echo"</table>";
  37. ?>
Código PHP:
Ver original
  1. Archivo conexion.php
  2. <?php
  3. class conexion {
  4.  
  5.     function conecta() {
  6.         global $HOSTNAME, $USERNAME, $PASSWORD, $DATABASE;
  7.         $conex = mysql_connect($HOSTNAME, $USERNAME, $PASSWORD)
  8.                 or die("No se pudo conectar, Verifique el servidor de BD" . mysql_error());
  9.         mysql_select_db($DATABASE, $conex);
  10.         mysql_query("SET NAMES 'utf8'");
  11.         return $conex;
  12.        
  13.     }
  14.  
  15.     function cierre() {
  16.         mysql_close();
  17.     }
  18. }
  19. ?>
Código PHP:
Ver original
  1. Archivo config_server.php
  2. <?php
  3. $HOSTNAME="localhost";
  4. $USERNAME="root";
  5. $PASSWORD="";
  6. $DATABASE="incidencias";
  7. ?>
  #7 (permalink)  
Antiguo 27/07/2014, 07:01
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, 5 meses
Puntos: 2658
Respuesta: Llamar procedimiento almacenado desde PHP

Cita:
Les comparto el codigo para que se pueda apreciar el codigo mejor el procedimiento que estoy intentando llamar es un simpel select * from tabla
Un simple "SELECT *" puede traer el mismo problema que un enorme SP.
Creo que no estás entendiendo lo que te digo...

Ante todo verifica que la ejecución de la llamada no esté devolviendo algún error, cosa que NO ESTAS HACIENDO.

Código PHP:
Ver original
  1. $result = mysql_query($sql, $conex)
  2.    or die("Error al ejecutar el procedimiento: ".mysql_error());

Si eso no devuelve nada, entonces el problema no está en la llamada al SP, sino en otra parte.

Para que entiendas mejor a donde apunto: En ciertos casos, y para cierta construcción de SP en MySQL, puede darse que los resultados de los SELECT no puedan ser devueltos por la interfaz de la librería MYSQL.
En otros casos, puede darse que PHP no pueda obtenerlos, porque las queries incluidas en el SP están creadas de tal forma que no pueden usarse con programación externa.
Todo eso puede quedar claro cuando pones alguna forma de recuperar el error que MySQL devuelve... O sea cuando programas de forma segura, cosa que no estás haciendo.

Por el modo que codificas, tu ASUMES que todo siempre está bien, y no consideras que pueda haber errores de datos´, de lógica o de ejecución. Es un error de principiante bastante común.
En las codificaciones de los sistemas de la empresa que trabajo, si yo quitara todas las validaciones incluidas para capturar esos problemas, podrían eliminarse el 75% de las líneas de código (no exagero); pero se necesitan para que los sistemas funcionen bien y seguros.

PD: No nos has puesto el código del SP, por lo que en realidad no podemos opinar mucho sobre él... Que lo describas, no alcanza. Tenemos que verlo.
__________________
¿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; 27/07/2014 a las 08:13
  #8 (permalink)  
Antiguo 28/07/2014, 11:26
Avatar de Sidus  
Fecha de Ingreso: enero-2014
Ubicación: Puebla
Mensajes: 32
Antigüedad: 10 años, 3 meses
Puntos: 1
Respuesta: Llamar procedimiento almacenado desde PHP

Gracias amigo por la ayuda. me funciono el procedimiento agregando el or die como lo estabas indicando.
  #9 (permalink)  
Antiguo 28/07/2014, 12:06
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, 5 meses
Puntos: 2658
Respuesta: Llamar procedimiento almacenado desde PHP

¿Cuál era al final el problema que se producía?

Me quedé con esa intriga.

__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Etiquetas: almacenado, mysql, procedimiento
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 04:32.