<?php
// 使用预处理语句防止SQL注入
// 假设我们有一个用户输入的变量 $user_input
$user_input = $_POST['user_input'];
// 1. 使用 PDO 进行数据库连接和预处理语句
try {
// 创建一个 PDO 实例,连接到 MySQL 数据库
$pdo = new PDO('mysql:host=localhost;dbname=test', 'username', 'password');
// 设置 PDO 错误模式为异常
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 准备 SQL 语句
$stmt = $pdo->prepare('SELECT * FROM users WHERE username = :username');
// 绑定参数,自动处理转义
$stmt->bindParam(':username', $user_input, PDO::PARAM_STR);
// 执行查询
$stmt->execute();
// 获取结果
$result = $stmt->fetchAll();
// 处理结果...
} catch (PDOException $e) {
echo "Error: " . $e->getMessage();
}
// 2. 使用 MySQLi 进行数据库连接和预处理语句
$mysqli = new mysqli('localhost', 'username', 'password', 'test');
// 检查连接是否成功
if ($mysqli->connect_error) {
die("Connection failed: " . $mysqli->connect_error);
}
// 准备 SQL 语句
$stmt = $mysqli->prepare("SELECT * FROM users WHERE username = ?");
// 绑定参数,自动处理转义
$stmt->bind_param("s", $user_input);
// 执行查询
$stmt->execute();
// 获取结果
$result = $stmt->get_result();
// 处理结果...
?>
PDO 示例:
PDO
进行数据库连接,并通过 prepare()
方法准备 SQL 语句。bindParam()
方法绑定用户输入的参数,确保参数被正确转义,防止 SQL 注入。execute()
方法执行查询,fetchAll()
方法获取查询结果。MySQLi 示例:
MySQLi
进行数据库连接,并通过 prepare()
方法准备 SQL 语句。bind_param()
方法绑定用户输入的参数,确保参数被正确转义,防止 SQL 注入。execute()
方法执行查询,get_result()
方法获取查询结果。这两种方法都能有效防止 SQL 注入攻击,推荐使用预处理语句来处理所有涉及用户输入的 SQL 查询。
下一篇:php readfile
Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3
Laravel 中文站