Nueva pregunta

Pregunta:

Fecha: 27-09-2019 07:04:57 (En Español)

Problema con consulta preparada MySQLi por procedimientos[Resuelta]

Buenas tardes, la semana pasada publiqué una pregunta en este foro en la cual le adjunté mi código y alguien me sugirió que utilizara consultas preparadas para que este no fuera vulnerable.

Bien, he buscado información al respecto y he sustituido mi código original el cual funcionaba bien, por uno que incluye una consulta preparada pero me arroja un error, el código es el siguiente:

$email= mysqli_real_escape_string($connection, $_POST['email']);
$password= mysqli_real_escape_string($connection, $_POST['password']);

$query= mysqli_prepare($connection,"SELECT * FROM users WHERE email=? and password=?");
mysqli_stmt_bind_param($query, "ss", $email,$password);
mysqli_stmt_execute($query);
$action= mysqli_num_rows($query); */


El print_r($query) me indica lo siguiente:

mysqli_stmt Object ( [affected_rows] => -1 [insert_id] => 0 [num_rows] => 0 [param_count] => 2 [field_count] => 25 [errno] => 0 [error] => [error_list] => Array ( ) [sqlstate] => 00000 [id] => 1 )

Lo que me da a entender que la consulta no se está ejecutando.

Y obvio, al no conseguir valor alguno, me arroja el siguiente error:
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\xampp\htdocs\index.php on line 20

Saludos.
Etiquetas: Base de Datos - HTML - MySQL - PHP - PHP Avanzado - PHP MySQLi - PHP7 - Pregunta - SQL - Web Votos: 0 - Respuestas: 4 - Vistas: 7 Compartir en: Google Facebook Twitter LinkedIn Link
 

Respuestas:

  • Fecha: 27-09-2019 09:53:10 Hola Xavi,
    Por lo que veo tu consulta sí se está ejecutando y te está devolviendo 1 valor al parecer con 25 campos.
    El problema no es tu consulta sino la manera en que quieres ver cuántos resultados obtienes.

    Estás utilizando mysqli_num_rows y, de acuerdo a su documentación, sólo devolverá el resultado correcto cuando tengas todos los registros disponibles, ya sea que los hayas almacenado en memoria o vayas obteniendo resultados uno a uno.

    Habiendo aclarado el punto tu código necesita llamar a mysqli_store_result antes de llamar a mysqli_num_rows.

    Quedaría algo así:

    $email= mysqli_real_escape_string($connection, $_POST['email']);
    $password= mysqli_real_escape_string($connection, $_POST['password']);
    
    $query= mysqli_prepare($connection,"SELECT * FROM users WHERE email=? and password=?");
    mysqli_stmt_bind_param($query, "ss", $email,$password);
    mysqli_stmt_execute($query);
    mysqli_store_result($connection);
    $action= mysqli_num_rows($query); */
    
      Votos: 0 - Link respuesta
     
  • Fecha: 27-09-2019 10:43:45 Hola Ernesto gracias por la ayuda, precisamente por sugerencia tuya es que estoy haciendo estos cambios en mi código.

    Hice lo que me dijiste y me da este error:

    Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, object given in C:\xampp\htdocs\hp2\hpl_es\index_login.php on line 20
      Votos: 0 - Link respuesta
     
  • Fecha: 28-09-2019 04:43:30
    $email= mysqli_real_escape_string($connection, $_POST['email']);
    $password= mysqli_real_escape_string($connection, $_POST['password']);
    
    $query= mysqli_prepare($connection,"SELECT * FROM users WHERE email=? and password=?");
    mysqli_stmt_bind_param($query, "ss", $email,$password);
    mysqli_stmt_execute($query);
    mysqli_stmt_store_result($query);
    $action= mysqli_stmt_num_rows($query);
    
    echo "Tienes {$action} resultados";
    
      Votos: 0 - Link respuesta
     
  • Fecha: 30-09-2019 06:55:13 Hola Ernesto, ahora si funcionó pero pasa algo que no entiendo, al iniciar sesión, no se cargan los datos del usuario, me explico, se crea un id de sesión pero no existe id de usuario por lo que la ingresar al sistema, está todo vacío.

    Esto es lo que tengo luego de la validación:

    if ($action > 0) {
        $row= mysqli_stmt_fetch($query);                    
        $id= mysqli_real_escape_string($connection, $row['id']);
        $nombre= mysqli_real_escape_string($connection, $row['nombre']);
        $apellido= mysqli_real_escape_string($connection, $row['apellido']);
    


    Los datos dentro de la variable $row no se muestran y eso lo entiendo porque se ha iniciado una sesión pero no se ha relacionado a algún usuario, la sesión no tiene id de usuario.
      Votos: 0 - Link respuesta
     
Para participar activamente de la comunidad primero debes autenticarte, ingresa al sistema.Iniciar Sesión
 
frjcbbae garagebible.com