PHP - Ayuda con Instrucciones Predefinidas

 
Vista:
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con Instrucciones Predefinidas

Publicado por Albert (49 intervenciones) el 24/12/2020 01:16:18
Hola:

Durante mi trabajo de validación de datos de formulario del lado de servidor, es la primera vez que utilizo la "instrucciones predefinidas" para evitar posibles ataques de inyecciones de SQL, pero no se que me falta, ya que no me muestra el resultado de la consulta. Os dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// Conexión con DB
$con = db_connect();
 
$sql_user = "SELECT * FROM usuarios WHERE usuario = ?";
$user = mysqli_stmt_prepare($con, $sql_user);
$user = mysqli_stmt_bind_param('s', $username);
mysqli_stmt_execute($user);
 
$result = mysqli_query($con, $user);
$total_user = mysqli_num_rows($result);
echo "\n La Consulta tiene: $total_user registros <br>";
 
if(mysqli_num_rows($user)>0) {
    // Si es mayor a cero ya existe el usuario
    echo "Este Nombre de usuario ya existe. <br>";
}

La siguiente consulta sobre el email (sin utilizar el método de instrucción predefinida), si me muestra resultados:

1
2
3
4
5
6
7
8
9
$sql_mail = "SELECT * FROM usuarios WHERE email = '$email'";
$mail = mysqli_query($con, $sql_mail);
$total_mail = mysqli_num_rows($mail);
echo "\n La Consulta tiene: $total_mail registros <br>";
 
if(mysqli_num_rows($mail)>0) {
    // Si es mayor a cero ya existe el email
    echo "Este Email ya existe. <br>";
}

¿Alguien me podría orientar sobre que es lo que me falta?. Gracias de antemano.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de joel
Val: 3.828
Oro
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con Instrucciones Predefinidas

Publicado por joel (1269 intervenciones) el 24/12/2020 09:01:29
Hola Albert, yo nunca he utilizado mysqli_stmt... pero... donde defines la variable $username? te da algún error?


Viendo la documentación https://www.php.net/manual/en/mysqli-stmt.prepare.php, no es como lo estas haciendo... creo que seria algo así:

1
2
3
4
5
6
7
$sql_user = "SELECT * FROM usuarios WHERE usuario = ?";
$username= "pepe";
 
$stmt = mysqli_stmt_init($link);
mysqli_stmt_prepare($stmt, $sql_user);
mysqli_stmt_bind_param($stmt, 's', $username);
mysqli_stmt_execute($stmt);


No se si puede ser ese el problema...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Imágen de perfil de Albert
Val: 165
Ha aumentado su posición en 2 puestos en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con Instrucciones Predefinidas

Publicado por Albert (49 intervenciones) el 24/12/2020 11:11:21
Hola Joel. La variable $username la declaro más arriba al recibir los datos del formulario:

1
$username = trim($_POST['usuario']);

Después con el código que me has pasado:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
$sql_user = "SELECT * FROM usuarios WHERE usuario = ?";
$stmt = mysqli_stmt_init($con);
mysqli_stmt_prepare($stmt, $sql_user);
mysqli_stmt_bind_param($stmt, 's', $username);
mysqli_stmt_execute($stmt);
 
 
$result = mysqli_query($con, $stmt);
$total_user = mysqli_num_rows($result);
echo "\n La Consulta tiene: $total_user registros <br>";
 
if(mysqli_num_rows($user)>0) {
    // Si es mayor a cero ya existe el usuario
    echo "Este Nombre de usuario ya existe. <br>";
}

No me muestra ningún error, pero no me muestra los resultados. Tendría que indicarme que se ha encontrado 1 registro y que el usuario ya existe. La conexión DB es correcta, ya que todo ha funcionado antes, pero al adaptarlo a "instrucción predefinida" algo se me esta escapando (?¿?)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Mauro
Val: 2.761
Oro
Ha aumentado 1 puesto en PHP (en relación al último mes)
Gráfica de PHP

Ayuda con Instrucciones Predefinidas

Publicado por Mauro (1036 intervenciones) el 25/12/2020 15:00:29
Para buscar los errores utiliza la función https://www.php.net/manual/en/mysqli-stmt.error.php.

Aún si no ves ningún mensaje desde el webserver puede estar fallando algo, siempre deberías verificar el resultado de las operaciones contra un servidor de bases de datos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar