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());
    }
    
  • 相关阅读:
    题解 UVA10213 【How Many Pieces of Land ?】
    NOIP 2018 游记
    POJ 1821 Fence(单调队列优化DP)
    HDU 2196 Computer(经典树形DP)
    POJ 2228 Naptime(DP+环形处理)
    POJ 1742 Coins(多重背包?)
    POJ 2311 Cutting Game(SG函数)
    BZOJ 2560(子集DP+容斥原理)
    HDU2841 Visible Trees(容斥原理)
    HDU 1796 How many integers can you find(容斥原理)
  • 原文地址:https://www.cnblogs.com/zhuxiaoxi/p/10890131.html
Copyright © 2011-2022 走看看