zoukankan      html  css  js  c++  java
  • PHP中使用PDO的预处理功能避免SQL注入

    不使用预处理功能

    <?php
    $id = $_GET['id'];
    $dsn = 'mysql:host=localhost;port=3306;dbname=database';
    try {
        $pdo = new PDO($dsn, $user, $pass);
        $sql = 'SELECT * FROM table where id = ' . $id;
        $stmt = $pdo->query($sql);
        $data = $stmt->fetchALL(PDO::FETCH_ASSOC);
        var_dump($data);
        $stmt->closeCursor();
    } catch (PDOException $e) {
        var_dump($e->getMessage());
    }
    

    使用匿名占位符预处理

    <?php
    $id = $_GET['id'];
    $dsn = 'mysql:host=localhost;port=3306;dbname=database';
    try {
        $pdo = new PDO($dsn, 'user', 'pass');
        $sql = 'SELECT * FROM table where id = ?';
        $stmt = $pdo->prepare($sql);
        $stmt->execute([$id]);
        $data = $stmt->fetchALL(PDO::FETCH_ASSOC);
        var_dump($data);
        $stmt->closeCursor();
    } catch (PDOException $e) {
        var_dump($e->getMessage());
    }
    

    使用命名占位符预处理

    <?php
    $id = $_GET['id'];
    $dsn = 'mysql:host=localhost;port=3306;dbname=database';
    try {
        $pdo = new PDO($dsn, 'user', 'pass');
        $sql = 'SELECT * FROM table where id = :id';
        $stmt = $pdo->prepare($sql);
        $stmt->bindValue(':id', $id);
        $stmt->execute();
        $data = $stmt->fetchALL(PDO::FETCH_ASSOC);
        var_dump($data);
        $stmt->closeCursor();
    } catch (PDOException $e) {
        var_dump($e->getMessage());
    }
    
    <?php
    $foo = $_GET['foo'];
    $bar = $_GET['bar'];
    $dsn = 'mysql:host=localhost;port=3306;dbname=database';
    try {
        $pdo = new PDO($dsn, 'user', 'pass');
        $sql = 'UPDATE table set column_foo = ? where column_bar = ?';
        $stmt = $pdo->prepare($sql);
        $stmt->bindParam(1, $foo);
        $stmt->bindParam(2, $bar);
        $stmt->execute();
        $data = $stmt->rowCount();
        var_dump($data);
        $stmt->closeCursor();
    } catch (PDOException $e) {
        var_dump($e->getMessage());
    }
    
  • 相关阅读:
    PHP 'ext/gd/gd.c' gdImageCrop整数符号错误漏洞
    Oracle Java SE远程安全漏洞(CVE-2013-5878)
    cordova for ios(android一样)添加插件
    Cordova for iOS[ PhoneGap]
    升级到win8.1右键响应慢
    不能运行,:framework not found SenTestingKit
    电驴服务器列表
    SQL常用代码收集
    Win2012 R2虚拟机自激活(AVMA)技术
    Win8系统本地连接显示为网络2
  • 原文地址:https://www.cnblogs.com/zhuxiaoxi/p/10890131.html
Copyright © 2011-2022 走看看