1. Comprobación de un solo usuario (por ejemplo, inicio de sesión):
Este es el escenario más común. Verificaremos si un nombre de usuario y una contraseña coinciden con un registro en la base de datos. Crucialmente, hash la contraseña antes de compararla. ¡Nunca almacene contraseñas en texto plano!
`` `PHP
Php
// Credenciales de la base de datos (¡reemplácelos con sus credenciales reales!)
$ servername ="Your_ServerName";
$ username ="your_username";
$ contraseña ="your_password";
$ dbname ="your_dbname";
// Entrada del usuario (desinfectar esto!)
$ usernameInput =$ _post ["Nombre de usuario"];
$ contraseñainput =$ _post ["contraseña"];
// desinfectar las entradas de los usuarios para evitar la inyección de SQL
$ usernameInput =mysqli_real_escape_string ($ conect, $ usernameInput);
$ PasswordInput =mysqli_real_escape_string ($ Conn, $ PasswordInput);
// Crear conexión
$ Conn =new MySQLI ($ ServerName, $ UserName, $ Password, $ dbname);
// verificar la conexión
if ($ conn-> Connect_error) {
die ("Conexión fallida:". $ conn-> Connect_error);
}
// Preparar y atar
$ stmt =$ conn-> preparar ("Seleccione Password_hash de usuarios donde username =?");
$ stmt-> bind_param ("s", $ usernameInput);
$ stmt-> ejecute ();
$ result =$ stmt-> get_result ();
if ($ result-> num_rows> 0) {
$ row =$ result-> fetch_assoc ();
$ HashedPassword =$ Row ["Password_hash"];
// Verifique la contraseña usando Password_verify (función de hash de contraseña incorporada de PHP)
if (contraseña_verify ($ contraseñainput, $ hashedpassword)) {
// Iniciar sesión exitoso
echo "¡Iniciar sesión exitoso!";
} demás {
// contraseña incorrecta
echo "contraseña incorrecta";
}
} demás {
// nombre de usuario no encontrado
echo "nombre de usuario no encontrado";
}
$ STMT-> Close ();
$ Conn-> Close ();
?>
`` `` ``
Explicación:
* Credenciales de la base de datos: Reemplace las credenciales del marcador de posición con los detalles reales de la base de datos MySQL.
* Entrada del usuario: Este código supone que el nombre de usuario y la contraseña se envían a través de una solicitud de publicación. Siempre desinfecte la entrada del usuario para evitar vulnerabilidades de inyección SQL. `mysqli_real_escape_string ()` es un paso básico, pero las declaraciones preparadas (utilizadas aquí) son mucho más robustas.
* Declaración preparada: Una declaración preparada evita la inyección de SQL al separar la consulta SQL de los datos proporcionados por el usuario. Es crucial para la seguridad.
* Hashing de contraseña: La base de datos debe almacenar contraseña *Hashes *, no contraseñas de texto sin formato. `contraseña_hash ()` crea un hash seguro y `contraseña_verify ()` compara la entrada del usuario con el hash almacenado.
* Manejo de errores: El código incluye el manejo básico de errores para la conexión de la base de datos y las fallas de consulta.
2. Comprobación de múltiples coincidencias (por ejemplo, buscar una tabla):
Si necesita encontrar múltiples coincidencias basadas en la entrada del usuario (como buscar productos con un nombre específico), deberá adaptar la consulta:
`` `PHP
Php
// ... (conexión de base de datos como se indicó) ...
$ Searchterm =$ _Post ["SearchterM"];
$ Searchterm =mysqli_real_escape_string ($ Conn, $ Searchterm); // desinfectar!
$ sql ="seleccione * de productos donde el nombre como '%$ Searchterm%'"; // Ejemplo simple:¡use la declaración preparada para una mejor seguridad!
$ resultado =$ conn-> Query ($ sql);
if ($ result-> num_rows> 0) {
while ($ row =$ result-> fetch_assoc ()) {
// procesa cada fila coincidente
Echo "Producto:". $ Row ["Nombre"]. "
";
}
} demás {
Echo "No se encontraron productos";
}
// ... (Cerrar conexión) ...
?>
`` `` ``
Nota importante: El ejemplo de búsqueda anterior utiliza la concatenación de cadenas, que es vulnerable a la inyección SQL si `$ Searchterm` no se desinfecta . Para una solución segura, reescribirla utilizando declaraciones preparadas. Ejemplo:
`` `PHP
$ stmt =$ conn-> preparar ("Seleccionar * de productos donde el nombre es así?");
$ Searchterm ="%". $ Searchterm. "%"; // Agregar comodines para
$ stmt-> bind_param ("s", $ searchterm);
$ stmt-> ejecute ();
// ... el resto del código para manejar los resultados ...
`` `` ``
Recuerde reemplazar la tabla de marcadores de posición y los nombres de columnas con el esquema real de su base de datos. Siempre priorice la seguridad mediante el uso de declaraciones preparadas y la desinfección de entrada adecuada para evitar ataques de inyección de SQL. Considere usar consultas parametrizadas para cualquier interacción con la entrada del usuario y su base de datos. Para escenarios más complejos o grandes conjuntos de datos, es posible que desee explorar técnicas más avanzadas como los procedimientos almacenados.