2013-10-17 58 views
-1

我一直在看本教程的帮助就切换到PDO:http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_DevelopersPDO - 使用预处理语句

然而,有一件事我无法找到。

说我有一个名为“用户”

所以,文本输入表格会为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

这就是为什么PDO的构思。 –

+1

为你逃脱的价值 – Ibu

+0

使用pdo代替旧的mysql程序风格函数更安全。 pdo课程将为您完成主要的字符串转义和消毒。 –

回答

1

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

即使你使用mysql_real_escape,那么你冒险存在函数或few cases where the function fails中的一些微小的未知错误。 PDO的工作方式是,它首先“准备”,它列出了要做什么,它是如何计算出操作和作品的。 然后它会带入您输入的内容。 SQL注入通过使自己的方式进入查询

工作,简单地说,

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

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

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

+0

感谢downvote。请解释一下吧? –

+1

阅读[这个问题]的答案(http://stackoverflow.com/q/5741187/603003)。 'mysql_real_escape_string()'并不能真正帮你避免所有的错误! – ComFreek

+0

@ComFreek:我想如果你阅读第二段,你会发现@aayush并不是说'mysql_real_escape_string'能够为你解决所有的错误。 –