Laravel  
laravel
文档
数据库
架构
入门
php技术
    
Laravelphp
laravel / php / java / vue / mysql / linux / python / javascript / html / css / c++ / c#

php防止sql注入

作者:风外听竹   发布日期:2025-03-22   浏览:155

<?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();

// 处理结果...
?>

解释说明:

  1. PDO 示例:

    • 使用 PDO 进行数据库连接,并通过 prepare() 方法准备 SQL 语句。
    • 使用 bindParam() 方法绑定用户输入的参数,确保参数被正确转义,防止 SQL 注入。
    • execute() 方法执行查询,fetchAll() 方法获取查询结果。
  2. MySQLi 示例:

    • 使用 MySQLi 进行数据库连接,并通过 prepare() 方法准备 SQL 语句。
    • 使用 bind_param() 方法绑定用户输入的参数,确保参数被正确转义,防止 SQL 注入。
    • execute() 方法执行查询,get_result() 方法获取查询结果。

这两种方法都能有效防止 SQL 注入攻击,推荐使用预处理语句来处理所有涉及用户输入的 SQL 查询。

上一篇:php imagecopyresampled

下一篇:php readfile

大家都在看

php session用法

phpisset函数

php后端

php爬虫框架

php读取csv文件

php 三元表达式

php文件加密

php 拆分字符串

php pcntl

php ||

Laravel PHP 深圳智简公司。版权所有©2023-2043 LaravelPHP 粤ICP备2021048745号-3

Laravel 中文站