PHP 安全:如何防止PHP中的SQL注入?
为了防止SQL注入,可以使用预处理语句(prepared statements)和绑定参数,这样可以确保数据和SQL指令分开,防止攻击者通过输入影响查询的结构。
以下是使用PDO(PHP Data Objects)的例子:
try {
$pdo = new PDO('mysql:host=your_host;dbname=your_db', 'username', 'password');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 使用预处理语句
$stmt = $pdo->prepare("SELECT * FROM users WHERE username = :username");
// 绑定参数
$stmt->bindParam(':username', $username, PDO::PARAM_STR);
// 为参数赋值
$username = 'safe_user'; // 这个值是安全的,不会影响SQL结构
// 执行查询
$stmt->execute();
// 获取结果
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
// 使用结果
foreach ($result as $row) {
// ...
}
} catch (PDOException $e) {
echo 'Connection failed: ' . $e->getMessage();
}
在上面的代码中,:username
是一个参数,通过 bindParam()
方法绑定,保证了即使 $username
包含恶意SQL代码,也不会影响查询结构。
确保在实际环境中替换数据库连接信息,并且使用适当的异常处理来管理可能的错误。
评论已关闭