这是一种通过PDO使用SELECT的安全方法

时间:2012-03-08 21:32:16

标签: php mysql pdo

  

可能重复:
  Best way to stop SQL Injection in PHP
  How do I sanitize input with PDO?

我通过$_GET提取了一个ID。我刚刚开始使用PDO,我不确定这是否安全。显然,下面的代码使用$_GET来获取ID。在将它放入查询之前,我根本没有对它进行消毒。这样安全吗?

<?php
if (isset($_GET['id'])) {
$blogid = $_GET['id'];
$post = $dbh->query("SELECT id, title, slug, body, image, author, date, category from   blog WHERE id='$blogid' ORDER BY date DESC");
$row = $post->fetch(); ?>

2 个答案:

答案 0 :(得分:2)

  

在我将它放入查询

之前,我根本没有对它进行消毒

不。根本不安全。 :)

您需要转义它,或使用预准备语句。使用PDO,我会使用准备好的声明:

if (isset($_GET['id']) && is_string($_GET['id'])) {
    $blogid = $_GET['id'];
    $stmt = $dbh->prepare("SELECT id, title, slug, body, image, author, date, category from   blog WHERE id= :id ORDER BY date DESC");
    $stmt->execute(array('id' => $_GET['id']));
    $row = $stmt->fetch();
}

答案 1 :(得分:0)

在没有清理/转义它的情况下,在SQL查询中插入变量 NEVER 是安全的。

如果您不想自己逃避,您可以做的是使用prepare语句和bind您的参数。

您可以查看PHP文档......

关于如何使用PDO准备: http://php.net/manual/en/pdo.prepare.php

如何使用参数绑定: http://www.php.net/manual/en/pdostatement.bindparam.php