可能重复:
准备好的语句如何防止 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...
}
?>
请注意,我确实了解它的作用,但它究竟是做什么来清理输入的呢?我知道mysql_*
use mysql_real_escape_string
which 只是把文字\
. PDO 是否使用相同的系统?如果没有,就卫生而言,我们依靠什么?