Avatar ·

¿Cómo prevenir inyecciones SQL en PHP? (guía completa)

¡Hola a todos! Soy un desarrollador PHP principiante y tengo un problema grave de seguridad. Estoy escribiendo un formulario de inicio de sesión simple para un sitio web, y mi código se ve así: ```php $username = $_POST['username']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($conn, $query); ``` Sé que esto es terriblemente inseguro, pero no entiendo cómo solucionarlo correctamente. Mis amigos dijeron que me pueden hackear a través de una inyección SQL. Intenté ingresar algo como `admin' OR '1'='1` en el campo de login, ¡y efectivamente me dejó entrar al sistema sin contraseña! He leído sobre `mysqli_real_escape_string()`, pero escuché que no es una panacea. También hablan de PDO y prepared statements, pero no entiendo cómo usarlos correctamente. Mi proyecto funciona en PHP 8.1 con MySQL. Por favor, expliquen en detalle: 1. ¿Cómo funciona exactamente la inyección SQL? 2. ¿Cuáles son los métodos modernos de protección? 3. ¿Qué método se considera la mejor práctica?