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