Ver Mensaje Individual
  #11 (permalink)  
Antiguo 14/03/2014, 16:10
a18327
 
Fecha de Ingreso: noviembre-2012
Mensajes: 74
Antigüedad: 11 años, 5 meses
Puntos: 3
Respuesta: Logica para paginar con stored procedures

Cita:
Iniciado por gnzsoloyo Ver Mensaje
OK, es lo que suponía: estás usando variables de usuario de MySQL en la llamada.
Básicamente es correcto lo que planteas, siempre que tengas en cuenta una cosa: Luego de ejecutarse el SP, bajo ninguna circunstancia se debe cerrar la conexión antes de leer el valor obtenido en ella, ni perder el enlace a la base, o la variable se muere.
Es la única precaución que se debe tener, por cuanto las variables de usuario de MySQL existen sólo en la misma conexión a MySQL en que se declaran, no tienen tipo de dato, su valor incial es NULL, y conservan el valor que se les asignó mientras la conexión persista.
Una nota a tener en cuenta es que como su valor es NULL al inicio, o se las inicaliza, o se debe tener cuidado al cargarlas en el SP, porque de no incializarla una asignación incorrecta podría devolver datos nulos.
Ese sería el caso de un SP que hiciera:

Código MySQL:
Ver original
  1. DECLARE var1 INT;
  2.  
  3. SELECT COUNT(1) INTO var1 FROM tabla;
  4.  
  5. SET @varexterna = @varexterna + var1;

En un caso así, si la variable @varexterna no llega inicializada con un valor dado, la asignación se destruye, porque en MySQL cuando sumas, multiplicas, concatenas, etc un valor con NULL... da NULL.

¿Se entiende?

Es decir, lo que habría que hacer, preventivamente en tu código sería:
Código PHP:
 <?php
    $mysqli 
= new mysqli("www.servidor.com""usuario""contraseña""base_de_datos");
    if (
$mysqli->connect_errno) {
        echo 
"Falló la conexión a MySQL: (" $mysqli->connect_errno ") " $mysqli->connect_error;
    }
    
// Inicialziar variable:
    
$result=$mysqli->query("SET @TotalRows = 0;");

    
//Obtener las filas de la pagina
    
$filasResult=$mysqli->query("CALL EncuestaRegistros(...,@TotalRows)");

    
//Obtener el total de filas
    
mysqli_next_result($mysqli);
    
$totalFilasResult $mysqli->query("SELECT @TotalRows as total");
    
$totalFilasArray $totalFilas ->fetch_assoc();
    
$totalFilas=$total['total'];
?>

En el caso del SP del flaviovich no era necesario inicializar la variable, pero si es cierto que se debe inicializar antes pues no siempre se sabe el código del SP.