Mysqli_fetch_row error

publicado por: Anonymous

Estoy aprendiendo PHP y me he quedado estancado acá, el error es el siguiente:

Warning: mysqli_fetch_row() expects parameter 1 to be mysqli_result, boolean given in C:xampphtdocsintranetscriptsfunciones.php on line 29

Y aca dejo mi función:

function validarLogin($usuario, $clave){

    global $conexion;
    $consulta = "SELECT * FROM usuarios WHERE usuario = '".$usuario."''  AND clave = '".$clave."'";
    $respuesta= mysqli_query($conexion, $consulta);

if ($fila = mysqli_fetch_row($respuesta) ) {
        session_start();
        $_SESSION['usuario'] = $usuario;
        return true;
    }
    return false;


 }

Buenas tardes, gracias por el feedback, el error se solvento, ahora tengo este script que me sirve como puente para acceder al panel de usuario, introduzco el usuario y la clave correctos, y aun me dice que son incorrectos, ademas de mostrar la pagina en blanco

alert(‘Los datos ingresados son incorrectos’)
location.href=”../index.php”;

solución

Lo que te está diciendo el error es que el método mysqli_fetch_row() espera al menos 1 resultado para poder recorrer, pero lo que está devolviendo $respuesta es false, ya que la consulta no devuelve ningún registro.

Para preveer esto es mejor que utilices una sintaxis como la siguiente:

function validarLogin($usuario, $clave){
    
        global $conexion;
        $consulta = "SELECT * FROM usuarios WHERE usuario = '".$usuario."''  AND clave = '".$clave."'";
         if ($respuesta= mysqli_query($conexion, $consulta)) {
            while ($fila = mysqli_fetch_row($respuesta)) {
               session_start();
               $_SESSION['usuario'] = $usuario;
               return true;
            }
         mysqli_free_result($resultado);
         } else {
         return false;
        }
}

Donde el primer if está condicionando si el resultado de la consulta es true continuara con el mysqli_fetch_row y sino return false;

Aclaración Importante:

Si estás utilizando esta función para validar los datos ingresados en un login, lo que estás teniendo es serios riesgos de inyección de código, utilizando la variable $consulta para almacenar la consulta SQL concatenando los parámetros de búsqueda.

Puedes leer más sobre SQL Injection: PHP: Inyección de SQL, Respuesta de SOes sobre SQL Injection

Esto puedes prevenirlo, modificando el código para utilizar prepared-statement y parameters.

function validarLogin($usuario, $clave){
    
        global $conexion;
        $stmt = $dbConnection->prepare('SELECT * FROM usuarios WHERE usuario = ? AND clave = ?');
        $stmt->bind_param('ss', $usuario, $clave);

        $stmt->execute();

        if ($result = $stmt->get_result()) {         
            while ($row = $result->fetch_assoc()) {
                session_start();
                $_SESSION['usuario'] = $usuario;
                return true;
            }
        } else {
            return false;
        }
}
Respondido por: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *