Foros del Web » Programando para Internet » PHP »

Se detienen los scripts tras una llamada a un procedure

Estas en el tema de Se detienen los scripts tras una llamada a un procedure en el foro de PHP en Foros del Web. Hola. El problema que tengo es que al ejecutar una consulta con la API de MySQLi se detiene la ejecución del resto del script PHP, ...
  #1 (permalink)  
Antiguo 02/05/2013, 09:17
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Se detienen los scripts tras una llamada a un procedure

Hola. El problema que tengo es que al ejecutar una consulta con la API de MySQLi se detiene la ejecución del resto del script PHP, es decir, ejecuta perfectamente el método que hace la consulta CALL nombre_procedimiento($this->propiedad).Me imprime los resultados de la consulta perfectamente pero los siguientes métodos que le siguen a éste no se han ejecutado. No me sale ningún mensaje de error ni nada por el estilo. He llegado a pensar que a lo mejor es un fallo tonto, que le falta algo pero no se que será.
Espero que me puedan echar una mano. Gracias.
  #2 (permalink)  
Antiguo 02/05/2013, 09:21
pr0
 
Fecha de Ingreso: marzo-2004
Mensajes: 687
Antigüedad: 20 años, 1 mes
Puntos: 28
Respuesta: Se detienen los scripts tras una llamada a un procedure

A este ritmo va a ver que poner un mensaje importante pidiendo como requisito imprescindible el código.

Pues eso, que si no pones el código adivinos aquí no hay.
  #3 (permalink)  
Antiguo 02/05/2013, 09:49
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Se detienen los scripts tras una llamada a un procedure

Código:
public function totalArticles(){
	if($this->conn){
		$query = "CALL numArticles($this->typeArticle)";
		$result = $this->conn->query($query);
		if($result){
			$row = $result->fetch_assoc();
			$this->totaArticles = $row["total"]; // todo esto se ejecuta bien
		}
       else{
                // cosas que no afectan...
       }
}
El código del procedure es

Código:
DELIMITER //
CREATE PROCEDURE numArticles(in categoria int)
BEGIN
    SELECT COUNT(producto_id) AS total FROM articulos WHERE tipo_id = categoria;
END;
DELIMITER ;
El procedimiento funciona muy bien desde la consola y desde el script pero después, como he dicho, se para de ejecutar el resto de funciones las cuales son totalmente independientes(tanto que si pongo un siempre echo "hola" no hace nada). Gracias.
  #4 (permalink)  
Antiguo 02/05/2013, 10:03
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Se detienen los scripts tras una llamada a un procedure

Antes de ejecutar la consulta imprímela para ver si está bien, aunque creo que no, porque $this->typeArticle debería estar entre llaves { }
__________________
- León, Guanajuato
- GV-Foto
  #5 (permalink)  
Antiguo 02/05/2013, 10:26
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Se detienen los scripts tras una llamada a un procedure

Ya lo he probado Triby y estabas bien encaminado al problema pero...esto no como darle explicación, pero cambiando la linea:
Código:
$query = "CALL numArticles($this->typeArticle)";
por esta otra

Código:
$query = 'CALL numArticles($this->typeArticle)';
Se ha solucionado todo. ¿Alguna explicación? no se a que es debido.
Gracias.
  #6 (permalink)  
Antiguo 02/05/2013, 10:36
Avatar de Triby
Mod on free time
 
Fecha de Ingreso: agosto-2008
Ubicación: $MX->Gto['León'];
Mensajes: 10.106
Antigüedad: 15 años, 8 meses
Puntos: 2237
Respuesta: Se detienen los scripts tras una llamada a un procedure

No creo que se haya solucionado, para comprobarlo, imprime la consulta con:

Código PHP:
Ver original
  1. echo $query;

El resultado será: CALL numArticles($this->typeArticle) tal cual, sin reemplazar la variable y te explico un poco:

Cuando tienes una cadena encerrada entre comillas simples, PHP no busca variables para interpretar, la deja tal como está.

En cambio, cuando está encerrada entre comillas dobles, PHP reemplaza las variables por su respectivo valor, pero, tratándose de elementos de arreglos (array) o propiedades de objetos, éstos deben estar encerrados entre llaves, supongo que es la forma en que PHP sabe dónde inicia y dónde termina la "expresión" a reemplazar.

Entonces, para que realmente te funcione:

Código PHP:
Ver original
  1. $this->typeArticle = 5; // Esto es sólo como ejemplo
  2. $query = "CALL numArticles({$this->typeArticle})";
  3. echo $query;

El resultado será: CALL numArticles(5)
__________________
- León, Guanajuato
- GV-Foto
  #7 (permalink)  
Antiguo 02/05/2013, 11:22
 
Fecha de Ingreso: septiembre-2012
Mensajes: 51
Antigüedad: 11 años, 7 meses
Puntos: 0
Respuesta: Se detienen los scripts tras una llamada a un procedure

Muchas gracias. Efectivamente he obtenido el resultado que me has dicho con ambas formas y ya me funciona tal y como me has dicho que lo ponga: con las llaves y comillas dobles acogiendo la variable.

Etiquetas: mysqli, procedure
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 10:43.