Foros del Web » Programando para Internet » PHP »

Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Estas en el tema de Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result en el foro de PHP en Foros del Web. Buenas resulta que tengo un php en el que hago una query y funciona y al hacer la segunda me reporta este error: Warning: mysqli_fetch_assoc() ...
  #1 (permalink)  
Antiguo 22/03/2012, 01:15
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Buenas resulta que tengo un php en el que hago una query y funciona y al hacer la segunda me reporta este error:

Warning: mysqli_fetch_assoc() expects parameter 1 to be mysqli_result, boolean given in C:\wamp\www\p\php\Vistas\V_MarcaTitulo.php on line 3

Código PHP:
Ver original
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4.     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5.     <title>Titulo</title>
  6.     <link rel="stylesheet" type="text/css" href="css/styleMarcas.css" />
  7. </head>
  8. <body>
  9.   <div id="Main">
  10.     <div id="Header">
  11.       <div id="Header1">
  12.         <h1 class="tittle">Tit1</h1>
  13.         <h2 class="tittle">tit2</h2>
  14.         <div id="Separador"></div>
  15.       </div>
  16.     </div>
  17.     <div id="MainContainer">
  18.       <div id="Content">
  19.         <div id="Brands">
  20.           <ul id="ulBrands" class="liEnlaces">
  21.             <?php
  22.                
  23.            require("php/Controladores/C_ListarMarcas.php");
  24.             ?>            
  25.           </ul>
  26.         </div>
  27.          <div id="TittleBrand">
  28.             <p align="center" id="TittleBrandP">
  29.             <?php
  30.             require("php/Controladores/C_MarcaTitulo.php");
  31.              
  32.             ?>    
  33.             </p>
  34.           </div>

Esto es : C_ListarMarcas.php
Código PHP:
Ver original
  1. require("php/Clases/GestionMarcas.php");
  2.    
  3.     $GM=new GestionMarcas();
  4.  
  5.     $cn=mysqli_connect("localhost", "fermin", "fermin","db" );
  6.     $marcas=$GM->ListarMarcas($cn);
  7.        
  8.         require("php/Vistas/V_ListarMarcas.php");
  9.         mysqli_free_result($marcas);

esta la clase GestionMarcas.php:

Código PHP:
Ver original
  1. public function ListarMarcas($cn){
  2.    return mysqli_query($cn,"call S_Marcas()");
  3.   }
  4.  
  5.   public function MarcaTitulo($cn){
  6.       if(!$_GET['id']){
  7.       $res= "call S_Marcas_by_idMarca(3)";
  8.      
  9.      }else{
  10.      $res="call S_Marcas_by_idMarca(". (int)$_GET['id'].")";
  11.      }
  12.      
  13.     return mysqli_query($cn,$res);
  14.   }

La vista de marcas V_ListarMarcas()
Código PHP:
Ver original
  1. <?php
  2. while($cell=mysqli_fetch_assoc($marcas)){?>
  3.       <li><a href="Colecciones.php?id=<?php echo $cell ['idMarcas']; ?>" alt""><?php echo $cell ['Nombre']; ?></a></li>
  4.  
  5. <?php
  6. }?>

Hasta aqui todo bien , hace el sp y muestra resultados , y es ahora al llamar a require("php/Controladores/C_MarcaTitulo.php"); cuandod a el error:

Aqui C_MarcaTitulo.php:
Código PHP:
Ver original
  1. <?php
  2.     $marcaTitulo=$GM->MarcaTitulo($cn);
  3.      require("php/Vistas/V_MarcaTitulo.php");
  4. ?>

Aqui la vista V_MarcaTitulo.php:
Código PHP:
Ver original
  1. <?php
  2.  
  3. while($cell=mysqli_fetch_assoc($marcaTitulo)){
  4.       echo $cell ['Nombre'];
  5.  
  6.  
  7. }?>

En principio hago lo mismo pero por alguna razon me salta ese error, y la llamada al sp que se obtiene lo saco por echo y es correcta... donde esta el problema?

Gracias!
  #2 (permalink)  
Antiguo 22/03/2012, 05:21
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Ese error en concreto indica que tu consulta no tiene resultados y que el apuntador a la siguiente fila de la tabla es NULL por lo que la función mysqli_fetch_assoc ha devuelto FALSE.

Deberias ir comprobando uno a uno todos los resultados que vas obteniendo antes de que te muestre el error ent odas las funciones antes de llegar a V_MarcaTitulo, ya que la recuperacion de la fila que haces depende de varias consultas anteriores. Posiblemente la anterior en C_MarcaTitulo no haya devuelto un resultado correcto.
  #3 (permalink)  
Antiguo 22/03/2012, 06:24
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Cita:
Ese error en concreto indica que tu consulta no tiene resultados y que el apuntador a la siguiente fila de la tabla es NULL por lo que la función mysqli_fetch_assoc ha devuelto FALSE.

Deberias ir comprobando uno a uno todos los resultados que vas obteniendo antes de que te muestre el error ent odas las funciones antes de llegar a V_MarcaTitulo, ya que la recuperacion de la fila que haces depende de varias consultas anteriores. Posiblemente la anterior en C_MarcaTitulo no haya devuelto un resultado correcto.
EL primero funciona correctamente al parecer, me devuelve todos los registros esperados y luego los imprimo en pantalla sin mayor problema , pero algo se queda inutilizado u ocupado puesto que es justo cuando voy a recorrer el array asociativo en la segunda , salta el error. Por lo que pienso que no es problema de lo que devuelve sino que algo hace que se quede inutilizable.

Es curioso, si en la segunda en vez de utilizar la instancia ya creada de la clase mysqlI , hago una nueva instancia y la utilizo para lanzar el segundo sp , funciona al 100% pero me parece chapucero tener que instanciar la clase por cada vez que quiera llamar a un sp.

Como podria limpiar el resulatdo de la primera para que no afecte a la segunda y seguir utilizando una unica instancia?
  #4 (permalink)  
Antiguo 22/03/2012, 09:12
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

cuando haces fetch sobre el resultado de una consulta, la fila que obtienes es "eliminada" de ese resultado por lo que no puedes recorrer dos veces el array porque la segunda, estara vacio. Si lo que quieres es recorrelo dos veces, vuelca el resultado sobre un array y recorrelo fila a fila las veces que quieras.

un saludo.
  #5 (permalink)  
Antiguo 22/03/2012, 09:31
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

son consultas diferentes, simplement no puedo hacer una y despues la otra.
que debo vaciar para poder hacer el segundo sp??el trma es q se ejecuta pero cuando vy a recorrer el resultado en la 2 vista salta el error.

un saludo!
  #6 (permalink)  
Antiguo 22/03/2012, 15:20
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

si, debes utilizar la funcion mysqli_free_result () para limpiar el resultado de la consulta y liberar la memoria y posteriormente crear la nueva consulta. Una vez hecho esto en principio creo que no deberias tener mas ese problema.
  #7 (permalink)  
Antiguo 22/03/2012, 16:37
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Hola de nuevo bray!! si por desgracia desde un principio ya estaba en mi codigo y no me soluciono nada :s
Cita:
Esto es : C_ListarMarcas.php
Código PHP:
Ver originalCopiar
require("php/Clases/GestionMarcas.php");

$GM=new GestionMarcas();

$cn=mysqli_connect("localhost", "fermin", "fermin","db" );
$marcas=$GM->ListarMarcas($cn);

require("php/Vistas/V_ListarMarcas.php");
mysqli_free_result($marcas);
Es $marcas lo que he de liberar no?? aunque ahora que me doy cuenta no se para que debo limpiarla, puesto que en el 2º sp guardo el resultado de la consulta en otra variable. No entiendo la relación... deberia usar la misma variable a caso?
Se te ocurre algo mas?

Gracias!
  #8 (permalink)  
Antiguo 23/03/2012, 04:46
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Hola, debes liberar la memoria antes de la segunda consulta y ahi la estas liberando tras el require.

Es que si dices que haciendo dos conexiones distintas y dos valores distintos, te funciona ... a mi lo que se me ocurre es eso, que no has liberado la memoria correctamente.
Cita:
mysqli_free_result($marcas);
$marcas=$GM->ListarMarcas($cn);
require("php/Vistas/V_ListarMarcas.php");
si no te funciona esto... poco mas se me ocurre la verdad.
  #9 (permalink)  
Antiguo 23/03/2012, 04:53
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Una pregunta, has comprobado si $GM->MarcaTitulo() ha devuelto algun resultado? porque me he dado cuenta de que la linea que produce el fallo no usa $marcas sino $marcaTitulo.

En V_listaMarcas.php prueba a escribir lo siguiente

Código PHP:
Ver original
  1. if ($marcaTitulo === FALSE){
  2.     echo "no se han obtenido resultados"
  3. }else  {
  4.   while($cell=mysqli_fetch_assoc($marcaTitulo)){
  5.       echo $cell ['Nombre'];
  6.  
  7. }

Última edición por bray; 23/03/2012 a las 05:00
  #10 (permalink)  
Antiguo 23/03/2012, 13:54
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

Ola de nuevo bray, y gracias una vez mas por tu interes.
Tienes razon devuelve FALSE :s a que podria ser debido????
Lod sp son correctos ya te comente que si por cada sp creo una instancia no hay problema por lo tanto que deberia hacer para liberar ese array o permitir que el resultado del segundo sp se carge?

Gracias, y un saludete!
  #11 (permalink)  
Antiguo 24/03/2012, 05:33
 
Fecha de Ingreso: agosto-2011
Mensajes: 110
Antigüedad: 12 años, 8 meses
Puntos: 13
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

devuelve false porque la funcion myqli_query no te esta devolviendo ningun resultado. la consulta tiene 0 filas y por ello devuelve false, como la funcion mysqli_fetch_assoc() requiere un array con los resultados y en su lugar estas pasando el restultado de la consulta que es false te devuelve ese error que te dice que se esperaba el parametro 1 pero se recibio un boolean(el false de la consulta).
  #12 (permalink)  
Antiguo 24/03/2012, 06:29
 
Fecha de Ingreso: abril-2010
Mensajes: 298
Antigüedad: 14 años
Puntos: 1
Respuesta: Obtengo mysqli_fetch_assoc() expects parameter 1 to be mysqli_result

vale entiendo lo que dices y agradezco tan clara explicación pero claro , me extraña que no devuelva nada si cuando hago otra instancia y no cambio nada mas , el 2º sp em devuelve correctamente ... voy a hacer algunas pruebas a ver q consigo.

Gracias bray!

Etiquetas: expects, html, mysql, parameter, sql
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 16:31.