Avatar ·

如何防止PHP中的SQL注入?(完整指南)

大家好!我是一名初学PHP开发者,遇到了一个严重的安全问题。我正在编写一个简单的网站登录表单,我的代码大致如下: ```php $username = $_POST['username']; $password = $_POST['password']; $query = "SELECT * FROM users WHERE username='$username' AND password='$password'"; $result = mysqli_query($conn, $query); ``` 我知道这非常不安全,但不知道如何正确修复。朋友说我的系统可能通过SQL注入被攻破。我尝试在登录字段中输入类似 `admin' OR '1'='1` 的内容,结果真的没有密码就登录成功了! 我读过关于 `mysqli_real_escape_string()` 的内容,但听说这并非万能药。还有人提到PDO和prepared statements,但我不明白如何正确使用它们。我的项目运行在PHP 8.1和MySQL上。 请详细解释: 1. SQL注入具体是如何工作的? 2. 有哪些现代的防护方法? 3. 哪种方法被认为是最佳实践?