Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta mysqli me da error

Estas en el tema de Consulta mysqli me da error en el foro de PHP en Foros del Web. Código PHP: <?php $mysqli  = new  mysqli ( 'localhost' , 'root' , '' , 'grupo' ); if ( mysqli_connect_errno ()){      printf ( "Falló la conexión: %s\n" ,  mysqli_connect_error ()); ...
  #1 (permalink)  
Antiguo 04/10/2015, 12:37
 
Fecha de Ingreso: diciembre-2014
Ubicación: Madrid
Mensajes: 274
Antigüedad: 9 años, 4 meses
Puntos: 5
Consulta mysqli me da error

Código PHP:
<?php
$mysqli 
= new mysqli('localhost','root','','grupo');

if (
mysqli_connect_errno()){
    
printf("Falló la conexión: %s\n"mysqli_connect_error());
}

$consulta "SELECT materia,curso FROM libros WHERE user=".$_GET['user'];

if (
$sentencia $mysqli->prepare($consulta)){
    
/* Ejecutar la sentencia */
    
$sentencia->execute();
    
/* Vincular las variables de los resultados */
    
$sentencia->bind_result($mysql_materia,$mysql_curso);
}

?>
<div id="h3-tec-bsm">
    Mis libros
</div>
<div id="tec-caja">
        <ul>
            <?php
                
while ($sentencia->fetch()){
                    echo 
'
            <li type="none">
                '
.$mysql_materia.' - '.$mysql_curso.'
            </li>
            '
;
                }
?>
        </ul>
    <a href="paginas/libros/mislibros.php">
        <p align="right">
            Ver más
            <i class="fa fa-arrow-right"></i>
        </p>
    </a>
</div>
Me da error Call to a member function fetch() on boolean in /Applications/XAMPP/xamppfiles/htdocs/grupo/paginas/libros/MisLibros-resumen.php on line 18

Estoy probando con mysqli (siempre he sido fan de mysql) pero mi primer intento siempre me sale mal. ¿Cómo se puede solucionar?
  #2 (permalink)  
Antiguo 04/10/2015, 12:47
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta mysqli me da error

Probablemente el método prepare() no es correcto y devuelve FALSE, y pues, al usar $sentencia sin validar que efectivamente sean un objeto produce el error.
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 04/10/2015, 13:30
 
Fecha de Ingreso: diciembre-2014
Ubicación: Madrid
Mensajes: 274
Antigüedad: 9 años, 4 meses
Puntos: 5
Respuesta: Consulta mysqli me da error

Cita:
Iniciado por pateketrueke Ver Mensaje
Probablemente el método prepare() no es correcto y devuelve FALSE, y pues, al usar $sentencia sin validar que efectivamente sean un objeto produce el error.
¿Y cómo podría solucionar eso?
  #4 (permalink)  
Antiguo 04/10/2015, 13:44
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Consulta mysqli me da error

Cita:
Iniciado por diegoguerrero Ver Mensaje
¿Y cómo podría solucionar eso?
Pues, primero revisa el manual para que entiendes bajo qué circunstancias prepare() devuelve FALSE.

Segundo, siempre debes validar antes de usar cualquier cosa: siempre.

Lo ḿas simple sería comprobar con un if() al que menos, que $consulta no sea FALSE.

Código PHP:
Ver original
  1. if ($consulta) {
  2.    // acá usas la variable
  3. }
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #5 (permalink)  
Antiguo 04/10/2015, 15:36
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta mysqli me da error

Si el campo "user" es un VARCHAR, te debe estar disparando un error de ejecución por columna desconocida.
Estas tratando el valor recibido por GET como número, si es un string se dará un error, y OBVIAMENTE no estas capturando errores.
No asumas que algo funciona bien solo porque este aparentemente bien escrito.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 04/10/2015, 20:47
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Consulta mysqli me da error

<saludo>
Pues el tema de conexión a base de datos y muestra de datos
funciona perfecto.

El tema es más bien de preguntarse, que debe pasar sí
no viene el user por get?

Obviamente, sí no viene, la consulta quedará sin dato
probable a buscar, y por ende el fetch no tendrá data para
mostrar, y por consecuencia muestra el mensaje que ya viste.

Así que es solo cuestión de mejorar la lógica a la hora de armar
la consulta, pues sí el dato user viene, todo funcionará
(Acabo de probar copiando el código y funciona)

</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com
  #7 (permalink)  
Antiguo 05/10/2015, 07:46
 
Fecha de Ingreso: diciembre-2014
Ubicación: Madrid
Mensajes: 274
Antigüedad: 9 años, 4 meses
Puntos: 5
Respuesta: Consulta mysqli me da error

Cita:
Iniciado por mortiprogramador Ver Mensaje
<saludo>
Pues el tema de conexión a base de datos y muestra de datos
funciona perfecto.

El tema es más bien de preguntarse, que debe pasar sí
no viene el user por get?

Obviamente, sí no viene, la consulta quedará sin dato
probable a buscar, y por ende el fetch no tendrá data para
mostrar, y por consecuencia muestra el mensaje que ya viste.

Así que es solo cuestión de mejorar la lógica a la hora de armar
la consulta, pues sí el dato user viene, todo funcionará
(Acabo de probar copiando el código y funciona)

</saludo>
Este archivo está insertado en otro PHP en el que sí está declarado.
  #8 (permalink)  
Antiguo 05/10/2015, 08:15
 
Fecha de Ingreso: diciembre-2014
Ubicación: Madrid
Mensajes: 274
Antigüedad: 9 años, 4 meses
Puntos: 5
Respuesta: Consulta mysqli me da error

He probado pasándolo a 'mysql' pero ahora sí que no me muestra nada. Además he declarado también aquí el $user y tampoco.
Código PHP:
Ver original
  1. <?php
  2. $sql = mysql_connect('localhost','root',''); mysql_select_db('grupo',$sql);
  3. echo mysql_error();
  4. $user = $_GET['user'];
  5. require ('conexion.php');
  6. $sql_tarea = "SELECT * FROM MisLibros WHERE 'user=".$user."'";
  7. $sql_execute = mysql_query($sql_tarea,$sql);
  8. echo mysql_error();
  9. ?>
  10. <div id="h3-tec-bsm">
  11.     Mis libros
  12. </div>
  13. <div id="tec-caja">
  14.         <ul>
  15.                 <?php
  16.                     while($import = mysql_fetch_assoc($sql_execute)){
  17.                         ?>
  18.                             <li type="none">
  19.                                 <?php echo $import['materia'].' - '.$import['curso']; ?>
  20.                             </li>
  21.                         <?php
  22.                     }
  23. echo mysql_error();
  24.                 ?>
  25.         </ul>
  26.     <a href="paginas/libros/mislibros.php">
  27.         <p align="right">
  28.             Mis libros
  29.             <i class="fa fa-arrow-right"></i>
  30.         </p>
  31.     </a>
  32. </div>
  #9 (permalink)  
Antiguo 05/10/2015, 08:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 4 meses
Puntos: 2658
Respuesta: Consulta mysqli me da error

Vuelvo al punto: Tienes que verificar si la sentencia queda bien escrita para MySQL. No te olvides que PHP no interpreta SQL, y MySQL tampoco lo hace con PHP.

Mira, el error básico es simplísimo, ´suponiendo que hayas ingresado tu user como "Antonio", tu SQL queda así:
Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE 'user=antonio'
¿Notas como todo lo del WHERE ha quedado resaltado como una cadena de texto?
Bueno, eso es porque lo UNICO que debe ir como cadena de texto es lo que estás recibiendo por GET:

Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE user='Antonio'
¿Notas la diferencia?

Ahora bien, otra cosa que te conviene hacer SIEMPRE, mientras estás aprendiendo a programar y todavía estás en etapa de desarrollo es visualizar lo que el SQL genera:
Código PHP:
$sql_tarea "SELECT * FROM MisLibros WHERE user='".$user."'";
echo 
$sql_tarea
de ese modo podrás asegurarte de qué es lo que estás enviando a la base, porque si el usuario no está llegando, obtendrías esto:

Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE user=''
Y eso no genera un error, pero tampoco devuelve datos.... cosa que es lo que no estás verificando en NINGUNA PARTE. Tu asumes que siempre obtienes datos, y eso no es necesariamente cierto.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 05/10/2015, 08:39
 
Fecha de Ingreso: diciembre-2014
Ubicación: Madrid
Mensajes: 274
Antigüedad: 9 años, 4 meses
Puntos: 5
Respuesta: Consulta mysqli me da error

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Vuelvo al punto: Tienes que verificar si la sentencia queda bien escrita para MySQL. No te olvides que PHP no interpreta SQL, y MySQL tampoco lo hace con PHP.

Mira, el error básico es simplísimo, ´suponiendo que hayas ingresado tu user como "Antonio", tu SQL queda así:
Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE 'user=antonio'
¿Notas como todo lo del WHERE ha quedado resaltado como una cadena de texto?
Bueno, eso es porque lo UNICO que debe ir como cadena de texto es lo que estás recibiendo por GET:

Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE user='Antonio'
¿Notas la diferencia?

Ahora bien, otra cosa que te conviene hacer SIEMPRE, mientras estás aprendiendo a programar y todavía estás en etapa de desarrollo es visualizar lo que el SQL genera:
Código PHP:
$sql_tarea "SELECT * FROM MisLibros WHERE user='".$user."'";
echo 
$sql_tarea
de ese modo podrás asegurarte de qué es lo que estás enviando a la base, porque si el usuario no está llegando, obtendrías esto:

Código MySQL:
Ver original
  1. SELECT * FROM MisLibros WHERE user=''
Y eso no genera un error, pero tampoco devuelve datos.... cosa que es lo que no estás verificando en NINGUNA PARTE. Tu asumes que siempre obtienes datos, y eso no es necesariamente cierto.
Estupenda respuesta. ¡Muchas gracias!
  #11 (permalink)  
Antiguo 05/10/2015, 18:20
Avatar de mortiprogramador
Colaborador
 
Fecha de Ingreso: septiembre-2009
Ubicación: mortuoria
Mensajes: 3.805
Antigüedad: 14 años, 7 meses
Puntos: 214
Respuesta: Consulta mysqli me da error

Cita:
Iniciado por diegoguerrero Ver Mensaje
Este archivo está insertado en otro PHP en el que sí está declarado.
<saludo>
Pues debe funcionar sin problema entonces
</saludo>
__________________
"Si consigues ser algo más que un hombre, si te entregas a un ideal, si nadie puede detenerte, te conviertes en algo muy diferente."
Visita piggypon.com

Etiquetas: mysql, mysqli, select, sql, variable
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:57.