5

Tengo un problema con mi código php que me manda el siguiente error

"Warning: mysqli_fetch_object() expects parameter 1 to be mysqli_result, boolean", Este es mi código php en donde me da error.

<?php

            include("connection.php");
            if(isset($_POST['submit']))
            {
                if($_POST['nombre'] == '' or $_POST['apellido'] == '' or $_POST['email'] == '' or $_POST['usuario'] == '' or $_POST['pass'] == '')
                {
                    echo "Debe llenar todo los datos por favor.";
                }else{
                    $sql = 'SELECT * FROM monitores';
                    $rec = mysqli_query($conexion,$sql);
                    $verificar = 0;

                    while($resultado = mysqli_fetch_object($rec))
                    {
                        if($resultado->usuario == $_POST['usuario'])
                        {
                            $verificar = 1;
                        }
                    }
                    if($verificar == 0)
                    {
                        $nom = $_POST['nombre'];
                        $apel = $_POST['apellido'];
                        $mail = $_POST['email'];
                        $usr = $_POST['usuario'];
                        $pass = $_POST['pass'];

                        $conexion->query("INSERT INTO monitores (nombre,apellido,email,usuario,contrasena) VALUES ('$nom','$apel','$mail','$usr','$pass')");
                        mysqli_query($conexion,$sql);


                        echo ' <script language="javascript">alert("Usuario registrado con éxito");</script> ';

                    }
                }
            }



        ?>

Esto es lo que se encuentra en "connection.php"

<?php
$host="localhost";
$hostuser="root";
$hostpw="";
$hostdb="fdj";

   $conexion = mysqli_connect($host, $hostuser, $hostpw);

if (!$conexion) {
    die('No se ha podido conectar a la base de datos');
}

?>
Pablo
  • 437
  • 5
  • 21
user13310
  • 51
  • 1
  • 2
  • Échale un ojo a [¿Qué es la inyección SQL y cómo puedo evitarla?](http://es.stackoverflow.com/q/10518/250). El código que compartes es vulnerable a ataques de inyección SQL: usar MySQLi es un buen paso, pero no es suficiente para evitarlos, deberías usar sentencias preparadas. – Alvaro Montoro Aug 25 '16 at 14:55

1 Answers1

2

Ese error ocurre porque el resultado de la consulta falló por algún motivo, y entonces el valor devuelto fue false en lugar de un resultset que es el primer parámetro de entrada de mysqli_fetch_object.

Lo primero que haría sería añadir algo de código para depurar y ver qué error ocurre. Eso lo puedes hacer usando mysqli_error. Algo como esto (en la consulta/sentencia SQL en la que recibes el error indicado). Asumiendo que es la primera de las dos que hay:

$sql = 'SELECT * FROM monitores';
$rec = mysqli_query($conexion,$sql);
if (!$rec) {
    echo("Error: %s\n", mysqli_error($conexion));
}

Eso te mostrará el mensaje de error y a partir de ahí podrás solucionar el problema sea lo que sea. Viendo el código, seguramente sea algo como un nombre incorrecto de tabla/columna, o la base de datos no seleccionó correctamente (¿dónde se selecciona?), o algún error de sintaxis (por las comillas)...

Aparte de eso, como menciono en un comentario arriba, deberías pasarte a las sentencias preparadas en lugar de crear SQL dinámicas que pueden sufrir ataques de inyección SQL.

Alvaro Montoro
  • 48,157
  • 26
  • 100
  • 179