PHP - Error al mostrar datos de un select count mysql PHP

 
Vista:
sin imagen de perfil

Error al mostrar datos de un select count mysql PHP

Publicado por Deivid (5 intervenciones) el 15/06/2017 04:50:25
Muchas gracias de antemano por la ayuda que me puedan brindar.

Estoy tratando de mostrar en un grafico con highcharts datos obtenidos de una consulta a una base de datos.
Puedo obtener y mostrar sin ningun problema los datos cuando el resultado del procedimiento almacenado no es 0.

Lo que deseo mostrar es la cantidad de personas que asistieron a los eventos durante el mes x por semana, en un grafico utilizando HighCharts.

_______________
Mayo
_______________

Semana 1 | 10 |
Semana 2 | 0 |
Semana 3 | 15 |
Semana 4 | 13 |
Semana 5 | 0 |
______________ |


este es el procedimiento:

1
2
3
4
5
6
7
8
9
CREATE DEFINER=`root`@`localhost` PROCEDURE `CSemana`(mes int, sem int)
BEGIN
 
Select count(presente) as cantidad from lista
where idmes = mes
and semana = sem
and presente = 1;
 
END

Y asi lo estoy tratando en PHP:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
 if($mes != 0){
       $query = 'CALL CSemana('.$mes.',2)';
       $rs = $link->query($query);
    if($rs==0){
        echo $semana2 = 0;
    }else{
        while($datos = $rs->fetch_array()){
           $semana2 = $datos['cantidad'];
           echo $semana2;
        }#while
    }
  }#if 
?>

El problema es que si lo hago asi simpre me devuelve 0, cuando no hay coincidencias en la base de datos.

Saludos.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Error al mostrar datos de un select count mysql PHP

Publicado por kip (877 intervenciones) el 15/06/2017 05:15:07
Hola, el problema es que aun cuando no existe ni un registro con aquel idmes ni semana COUNT te retorna 0 ? desearias que te retorne un NULL ? Cuentanos con mas detalle.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error al mostrar datos de un select count mysql PHP

Publicado por Deivid (5 intervenciones) el 15/06/2017 05:35:42
No, en realidad deseo que si el resultado de COUNT es 0 poder imprimir ese 0.
Pero si lo hago de esta manera:

1
2
3
4
5
6
7
8
9
10
11
<?php if($mes != 0){
 
    $query = 'CALL CSemana('.$mes.',1)';
    $rs = $link->query($query);
 
        while($datos = $rs->fetch_array()){
            $semana1 = $datos['cantidad'];
        }#while
 
    echo $semana1;
    }#if ?>

me da este error: Fatal error</b>: Call to a member function fetch_array() on boolean y lo que tengo en la linea que indica el error es esto: while($datos = $rs->fetch_array()){



por lo que estaba tratando de validar si el error se debia a que lo que devolvia la consulta no era 0.

Voy a adjuntar el archivo completo para que lo lean...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Error al mostrar datos de un select count mysql PHP

Publicado por kip (877 intervenciones) el 15/06/2017 06:28:11
Creo que tienes un error en la creacion del procedure, intentalo asi:

1
2
3
4
5
6
7
8
9
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `CSemana`(IN mes INT, IN sem INT)
BEGIN
Select count(presente) as cantidad from lista
where idmes = mes
and semana = sem
and presente = 1;
END$$
DELIMITER ;

Si aun no funciona, prueba mostrando el error que tienes al ejecutar la query, asi:

1
2
3
4
5
$rs = $link->query($query);
if ( ! $rs) {
    printf("Error: %s", $link->error);
    die();
}

Haz la prueba y nos cuentas si funciona o que error te muestra.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Error al mostrar datos de un select count mysql PHP

Publicado por Deivid Araya (5 intervenciones) el 15/06/2017 16:26:52
Hola amigo.

Probe la opcion que me diste pero continuo el mensaje: Fatal error: Call to a member function fetch_array() on boolean

Y el error me indica esto: Error: Commands out of sync; you can't run this command now
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Error al mostrar datos de un select count mysql PHP

Publicado por kip (877 intervenciones) el 15/06/2017 20:00:11
El problema esta en que estas llamando dos veces al procedimiento sin liberar el conjunto de resultados de la primera llamada antes de llamarlo por segunda vez, no me habia fijado que hacias dos llamadas, coloca esto:

1
$rs->free();

Justo antes de la segunda linea repetida de:
1
<?php if($mes != 0){

Y antes de:
1
<?php if(isset($semana3)){echo $
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
sin imagen de perfil

Error al mostrar datos de un select count mysql PHP

Publicado por Deivid (5 intervenciones) el 15/06/2017 20:28:38
Sigo recibiendo el error:
<b>Fatal error</b>: Call to a member function fetch_array() on boolean...


Asi puse el codigo:

Deje un solo if($mes !=0) que englobe todas las repeticiones y antes de volver a llamar a funcion query() aplico el free(), pero sigue dando inconvenientes.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
data: [
    <?php if($mes != 0){
 
        $query = 'CALL CSemana('.$mes.',1)';
        $rs = $link->query($query);
        $datos = $rs->fetch_array();
        $semana1 = $datos['cantidad'];
        echo $semana1;
 
    ?> ,
 
    <?php
 
        $rs->free();
 
        $query = 'CALL CSemana('.$mes.',2)';
        $rs = $link->query($query);
        $datos = $rs->fetch_array();
        $semana2 = $datos['cantidad'];
        echo $semana2;
 
    ?>
 
    ,<?php
      $rs->free();
      if(isset($semana3)){echo $semana3;}else{echo 0;}?>,
       <?php if(isset($semana4)){echo $semana4;}else{echo 0;} ?>,
        <?php if(isset($semana5)){echo $semana5;}else{echo 0;}
 
    }#ifcierre.
    ?>]
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
sin imagen de perfil

Error al mostrar datos de un select count mysql PHP

Publicado por Deivid (5 intervenciones) el 15/06/2017 23:49:27
Lo solucione cerrando y abriendo nuevamente la conexión cada vez que lo requiero.
Imagino que esto no es lo mas correcto o optimo pero aun no lo logro de otra forma, solo limpiando el resultset no funcionó.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
<?php
 
$link2 = new mysqli($host,$user,$pass,$db);
 
$query = 'CALL CSemana('.$mes.',2)';
$rs = $link2->query($query);
 
if ( ! $rs) {
    printf("Error: %s", $link2->error);
    die();
}
 
$datos = $rs->fetch_array();
$semana2 = $datos['cantidad'];
echo $semana2;
$rs->free();
$link2->close();
?>
 
,
 
<?php
 
$link2 = new mysqli($host,$user,$pass,$db);
 
$query = 'CALL CSemana('.$mes.',3)';
$rs = $link2->query($query);
 
if ( ! $rs) {
    printf("Error: %s", $link2->error);
    die();
}
 
$datos = $rs->fetch_array();
$semana2 = $datos['cantidad'];
echo $semana2;
$rs->free();
$link2->close();
 
?>
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
2
Comentar
Imágen de perfil de kip
Val: 2.325
Plata
Ha disminuido 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Error al mostrar datos de un select count mysql PHP

Publicado por kip (877 intervenciones) el 16/06/2017 02:23:39
Entiendo, el unico problema alli podria ser algo de lentitud por abrir y cerrar la conexion, intenta colocando esta linea donde colocaste los free() anteriores:

1
$link->next_result();

Es un raro comportamiento que tiene la extension mysqli con los procedimientos, prueba con aquella linea y me cuentas.

Si no te funciona, otra forma seria crear un dato de salida en tu procedimiento y almacenarlo en una variable desde la query, algo asi:

1
2
3
4
5
6
7
8
9
DELIMITER $$
CREATE DEFINER=`root`@`localhost` PROCEDURE `CSemana`(IN mes INT, IN sem INT, OUT cantidad INT)
BEGIN
Select count(presente) INTO cantidad from lista
where idmes = mes
and semana = sem
and presente = 1;
END$$
DELIMITER ;

El codigo PHP seria algo asi:

1
2
3
4
5
$query = 'CALL CSemana( '. $mes . ' , 2, @cantidad)';
$link->query($query);
$rs = $link->query('SELECT @cantidad AS cantidad;');
$datos = $rs->fetch_assoc();
$semana2 = $datos['cantidad'];

Prueba ambos y me avisas, aunque te recomiendo el segundo, ya que asi no te preocupas por el estado del buffer.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar