究竟是什么让PDO安全?

Nic*_*ick 8 php pdo sanitization

可能重复:
预处理语句如何防止SQL注入攻击?

对于我们这些刚接触PDO的人来说,我们认为它更安全,使用起来更好,但是我无法理解的是,这是如何安全的?

<?php
$db = new PDO('mysql:host=localhost;dbname=testdb;charset=UTF-8', 'username', 'password');
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
try {
    //connect as appropriate as above
    $db->query('hi'); //invalid query!
} catch(PDOException $ex) {
    echo "An Error occured!"; //user friendly message
    some_logging_function($ex->getMessage());
}
foreach($db->query('SELECT * FROM table') as $row) {
    echo $row['field1'].' '.$row['field2']; //etc...
}
?>
Run Code Online (Sandbox Code Playgroud)

请注意,我确实理解它的作用,但它究竟对消毒输入做了什么呢?我知道只mysql_*使用mysql_real_escape_string文字的用法\.PDO是否使用同一系统?如果没有,我们在卫生方面依赖什么?

Nan*_*nne 4

虽然查询中的输入似乎没有任何需要清理的内容。此外,如果您只是输入查询,它不会对其执行任何操作。

但它确实具有称为准备好的语句的魔力,这确实对您有帮助。您可以检查 @yourcommonsense 的链接以获取更多信息:

准备好的语句如何防范 SQL 注入攻击?