New question

Question:

Date: 27-09-2019 07:04:57 (In Spanish)

Problema con consulta preparada MySQLi por procedimientos[Resolved]

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.
Tags: Database - HTML - MySQL - PHP - PHP Advanced - PHP MySQLi - PHP7 - Question - SQL - Web Votes: 0 - Answers: 4 - Views: 7 Share on: Google Facebook Twitter LinkedIn Link
 

Answers:

  • Date: 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); */
    
      Votes: 0 - Link answer
     
  • Date: 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
      Votes: 0 - Link answer
     
  • Date: 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";
    
      Votes: 0 - Link answer
     
  • Date: 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.
      Votes: 0 - Link answer
     
To actively participate in the community first must authenticate, enter the system.Sign In
 
frjcbbae garagebible.com