使用准备好的PDO声明解释消毒输入

时间:2014-01-24 10:54:23

标签: sql pdo

所以我意识到有一些类似的帖子,但我发现解释不够详细,所以我会更具体地说出问题;而这篇文章也是专门关于准备好的陈述。我相信这对论坛是有建设性的,因此应该有希望在指导范围内。

所以我的一般问题是:如何使用PDO库准备语句来防止SQL注入。

以下网站有一些很好的例子http://net.tutsplus.com/tutorials/php/php-database-access-are-you-doing-it-correctly/

try {
  $pdo = new PDO('mysql:host=localhost;dbname=someDatabase', $username, $password);
  $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

  $stmt = $pdo->prepare('INSERT INTO someTable VALUES(:name)');
  $stmt->execute(array(
    ':name' => 'Justin'
  ));

  # Affected Rows?
  echo $stmt->rowCount(); // 1
} catch(PDOException $e) {
  echo 'Error: ' . $e->getMessage();

根据用户ExtPro(How do I sanitize input with PDO?)回复的类似帖子“使用PDO你可以分离SQL并使用预准备语句传递参数,这样就不需要转义字符串,因为这两者是分开进行的然后在执行时合并,参数自动处理为stings,来自上面的来源:“

现在我确信这是完全有效的答案,但对我而言,这并不能解释它。如何在不允许允许进入数据库的:name变量中的任何内容的情况下进行插入查询;如果该变量的内容是恶意的sql代码,那么我不知道它是如何被消毒的。

感谢。

1 个答案:

答案 0 :(得分:0)

抱歉,我错过了david strachan指出的帖子。 How can I prevent SQL injection in PHP?

这确实是重复的。我老实地看了一下,但没有找到帖子,所以请不要低估我,只是将帖子标记为重复。