Foros del Web » Programando para Internet » PHP »

Fatal error: Call to a member function fetch_assoc() on a non-object

Estas en el tema de Fatal error: Call to a member function fetch_assoc() on a non-object en el foro de PHP en Foros del Web. Cordial saludo. Trabajo con PHP 5 y Mysql 5 tengo parte del siguiente codigo me ejecuta bien el primer select pero el segundo me sale ...
  #1 (permalink)  
Antiguo 09/09/2013, 17:11
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Fatal error: Call to a member function fetch_assoc() on a non-object

Cordial saludo.

Trabajo con PHP 5 y Mysql 5 tengo parte del siguiente codigo me ejecuta bien el primer select pero el segundo me sale lo siguiente:
Fatal error: Call to a member function fetch_assoc() on a non-object

No coloque todo el código porque es extenso, se debe leer todos los registros de la tabla tmp_HoraDoce y guardarlas en otra; por eso debo sacar el maximo consecutivo de la otra tabla pero al hacer esa consulta me sale el error:
Fatal error: Call to a member function fetch_assoc() on a non-object

Que debo hacer para evitar ese error y poder seguir con el proceso??

Código PHP:
            $conexion crearConexion();
            
$conexion->autocommit(FALSE);

            
$Estado ='A';
            
$Cont 0;

            
$sql "SELECT thdDia, thdHoraInic, thdHoraFina 
                    FROM tmp_HoraDoce 
                    WHERE usuConsecutivo = ? AND 
                    sedConsecutivo = ?  
                    ORDER BY thdDia"
;
            
$sentencia $conexion->prepare($sql);
            
$sentencia->bind_param("ii"$usuConsecutivo$sedConsecutivo);
            
$sentencia->execute();
            
$sentencia->bind_result($thdDia$thdHoraInic$thdHoraFina);
            
            while(
$sentencia->fetch())
                {
                    
$fila = array('thdDia'=>$thdDia'thdHoraInic'=>$thdHoraInic'thdHoraFina'=>$thdHoraFina);

                    
$Sql "select max(hdConsecutivo) as Consec from horadoce";
                    
$BusqHora $conexion->query($Sql);
                    while(
$arrHora $BusqHora->fetch_assoc())
                        {
$hdConsecutivo $arrHora['Consec'] + 1;}
                    
$BusqHora->free();
                              } 
Agradezco de antemano la ayuda y sugerencias que me puedan brindar.
  #2 (permalink)  
Antiguo 10/09/2013, 00:16
 
Fecha de Ingreso: julio-2013
Mensajes: 87
Antigüedad: 11 años, 4 meses
Puntos: 9
Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

El problema lo debes tener en la función crearConexion(). El error que te da es en el objeto $conexion.
  #3 (permalink)  
Antiguo 10/09/2013, 02:39
 
Fecha de Ingreso: septiembre-2012
Ubicación: Cuba
Mensajes: 67
Antigüedad: 12 años, 2 meses
Puntos: 1
Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

Asegurate que la segunda consulta sql se ejecuta correctamente. Haces un max sin agrupar por ningun campo.
  #4 (permalink)  
Antiguo 10/09/2013, 03:18
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

Se ejecuta correctamente... pero no debe estar devolviendo datos, por lo que el objeto devuelvo es nulo.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #5 (permalink)  
Antiguo 10/09/2013, 09:59
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

Cordial saludo.

Gracias por sus respuestas; no es error de la conexión porque la primera consulta la hace bien; si yo coloco la consulta del MAX fuera del while lo hace; pero dentro del while me sale ese error; me interesa saber el maximo consecutivo de esa tabla antes de mandar a guardar en esa tabla por eso no esta agrupado con ningun campo; como hago para validar ese dato nulo como lo dice gnzsoloyo porque efectivamente esa tabla esta totalmente vacia.

Agradezco de antemano la ayuda y sugerencias que me puedan brindar.
  #6 (permalink)  
Antiguo 10/09/2013, 10:05
Avatar de Patriarka  
Fecha de Ingreso: enero-2011
Ubicación: Moreno, Buenos Aires, Argentina
Mensajes: 2.851
Antigüedad: 13 años, 9 meses
Puntos: 288
Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

el campo hdConsecutivo existe?
  #7 (permalink)  
Antiguo 10/09/2013, 10:14
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

Cordial saludo.

Claro que existe el campo hdConsecutivo con tipo de dato smallint.

Ingrese un registro nuevo por el phpmyadmin pero sigue saliendo el mismo error en esa consulta

Última edición por tattojk; 10/09/2013 a las 10:37
  #8 (permalink)  
Antiguo 10/09/2013, 10: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: 17 años
Puntos: 2658
Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

El tema en realidad no es tan complicado:
- Si la tabla está vacía la consulta por MAX(), MIN, AVG() o cualquier otra cosa, siempre devolverá un registro nulo. Siempre. Y no sirve usar COUNT() porque no sólo requierrá dos consultas, sino que si no hay condiciones ni registros, también peude devolver NULLL.
- fetch_asoc() no es funcional cuando tienes tablas nulas, porque intenta mover el puntero más allá de donde no hay nada.
La solución es simple: Si no devuelve registros, devuelve las cabeceras de tablas, y la cantidad de registros es 0...
Código PHP:
Ver original
  1. $conexion = crearConexion();
  2.             $conexion->autocommit(FALSE);
  3.  
  4.             $Estado ='A';
  5.             $Cont = 0;
  6.  
  7.             $sql = "SELECT thdDia, thdHoraInic, thdHoraFina
  8.                    FROM tmp_HoraDoce
  9.                    WHERE usuConsecutivo = ? AND
  10.                    sedConsecutivo = ?  
  11.                    ORDER BY thdDia";
  12.             $sentencia = $conexion->prepare($sql);
  13.             $sentencia->bind_param("ii", $usuConsecutivo, $sedConsecutivo);
  14.             $sentencia->execute();
  15.             $sentencia->bind_result($thdDia, $thdHoraInic, $thdHoraFina);
  16.            
  17.             while($sentencia->fetch())
  18.                 {
  19.                     $fila = array('thdDia'=>$thdDia, 'thdHoraInic'=>$thdHoraInic, 'thdHoraFina'=>$thdHoraFina);
  20.  
  21.                     $Sql = "SELECT MAX (hdConsecutivo) Consec FROM horadoce";
  22.                     $BusqHora = $conexion->query($Sql);
  23.                     if($BusqHora->num_rows() > 0){
  24.                         while($arrHora = $BusqHora->fetch_assoc())
  25.                             {$hdConsecutivo = $arrHora['Consec'] + 1;}
  26.                         $BusqHora->free();
  27.                                   }  
  28.                          }
  29.                      else{$hdConsecutivo = 1;}
__________________
¿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; 10/09/2013 a las 10:53
  #9 (permalink)  
Antiguo 10/09/2013, 10:53
 
Fecha de Ingreso: febrero-2005
Mensajes: 673
Antigüedad: 19 años, 8 meses
Puntos: 2
Pregunta Respuesta: Fatal error: Call to a member function fetch_assoc() on a non-object

Cordial saludo.

Sigue saliendo el error pero con el num_rows
Fatal error: Call to a member function num_rows() on a non-object in

Por lo visto no se puede hacer eso cuando esta recorriendo el while; lo hice de esta manera y funciono.
Código PHP:
            while($sentencia->fetch())
                {
                    
$fila = array('thdDia'=>$thdDia'thdHoraInic'=>$thdHoraInic'thdHoraFina'=>$thdHoraFina);
                    
$arr['thdDia'][$i] = $fila['thdDia'];
                                        
$arr['thdHoraInic'][$i] = $fila['thdHoraInic'];
                                        
$arr['thdHoraFina'][$i] = $fila['thdHoraFina'];
                    
$i++;
                }
            for(
$j 0$j $i$j++)
                {
                    
$Sql "select max(hdConsecutivo) as Consec from horadoce";
                    
$BusqHora $conexion->query($Sql);
                    while(
$arrHora $BusqHora->fetch_assoc())
                        {
$hdConsecutivo $arrHora['Consec'] + 1;}
                    
$BusqHora->free();                    
                                } 
No se si sera lo mas funcional; que opinan ustedes???

Agradezco de antemano la ayuda y sugerencias que me puedan brindar.

Etiquetas: call, fatal, function, mysql, registro, select, sql, tabla
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 08:16.