PDO - 使用预准备语句

时间:2013-10-17 18:06:49

标签: php security pdo

我一直在查看本教程,以获得有关切换到PDO的帮助:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers

但是,我找不到一件事。

假设我有一个名为“user”的文本输入表单

那么,PDO的PHP代码是否如下所示:

$name = $_POST['name'];
$stmt = $db->prepare("INSERT INTO table(name) VALUES(?)");
$stmt->execute(array($name));
$rows = $stmt->fetchAll(PDO::FETCH_ASSOC);

基本上我要问的是,如果这是安全的。我知道PDO与mysql_ *不同,因为你不再使用mysql_real_escape_string了,但这是我需要做的就是确保不会将恶意数据放入数据库吗?

1 个答案:

答案 0 :(得分:1)

据我所知,SQL注入PDO几乎是不可能的(或者至少我没有听说过这样做的方法)。

即使您使用mysql_real_escape,您也可能会冒险在函数中出现一些微小的未知错误或few cases where the function fails。 PDO的工作方式是首先准备好它,它列出了要做的事情,它确定了操作和工作。 然后它引入你输入的东西。 SQL注入通过进入查询

来工作

简单地说,

$query = "INSERT INTO table(name) VALUES($name)";

很脆弱。即使你逃脱它,你也可能不完全安全。

如果您准备它,它不会考虑$ name。因此,黑客无法进入查询。只有在它已经计算出要调用的操作之后,它才会相应地放置所有内容,从而使得黑客几乎不可能以任何方式修改查询。