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


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM