用php代码体现防SQL注入,含详细注释
时间: 2024-02-22 21:00:46 浏览: 15
当使用 PHP 与数据库交互时,为了避免 SQL 注入攻击,可以使用预处理语句来过滤用户输入的数据。以下是一个 PHP 代码示例:
```php
<?php
// 数据库连接配置
$servername = "localhost";
$username = "username";
$password = "password";
$dbname = "myDB";
// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败: " . $conn->connect_error);
}
// 预处理语句
$stmt = $conn->prepare("SELECT * FROM myTable WHERE name=? AND age=?");
$stmt->bind_param("si", $name, $age);
// 绑定参数
$name = "John";
$age = 25;
// 执行查询
$stmt->execute();
// 处理结果集
$result = $stmt->get_result();
while ($row = $result->fetch_assoc()) {
echo "Name: " . $row["name"] . " - Age: " . $row["age"] . "<br>";
}
// 关闭连接
$stmt->close();
$conn->close();
?>
```
注释如下:
- 第 3-6 行:数据库连接配置,包括主机名、用户名、密码和数据库名。
- 第 9-14 行:创建连接并检查连接是否成功。
- 第 17-18 行:预处理 SQL 语句,其中 `name=?` 和 `age=?` 是占位符,表示待绑定的参数。
- 第 20 行:使用 `bind_param()` 方法绑定参数,第一个参数 `"si"` 表示两个参数的类型,`s` 表示字符串类型,`i` 表示整数类型,后面的两个参数分别为 `$name` 和 `$age`,即用户输入的数据。
- 第 23-30 行:执行查询、处理结果集和输出结果。
- 第 33-34 行:关闭语句和连接。
通过使用预处理语句和参数绑定,可以避免 SQL 注入攻击,因为用户输入的数据不会被直接插入 SQL 语句中,而是先以参数的形式传递给预处理语句,再由数据库引擎进行解析和执行。