1

我对 PDO 比较陌生,我编写了以下代码块:

$id = $_GET['id'];

$db = new PDO('mysql:host=localhost;dbname=testdb;charset=utf8', 'username', 'password');

foreach($db->query("SELECT id,name FROM names where id = '$id' ") as $row) {
    echo "<p>", ($row['name']), "<br>";
}

我的不确定性是:

  1. 因为我使用的是 PDO,所以在第一行省略 mysql_real_escape_string 是否安全
  2. 在不使用绑定值的情况下运行上述查询是否安全。

谢谢

4

2 回答 2

5

不,这不安全。PDO 不会神奇地为您逃避您的查询。如图所示,您的代码对 SQL 注入是开放的。

如果您在查询中使用变量,请不要使用->query. 不要试图自己逃避它们。您应该使用准备好的语句。这就是安全的方法。

$stmt = $db->prepare('SELECT id,name FROM names where id = ?');
if($stmt->execute(array($id))){
    while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
        echo "<p>", ($row['name']), "<br>";
    }
}

所以,是的,您需要使用bindParam, 或execute,如图所示。

PSmysql_real_escape_string适用于(已弃用)mysql_扩展。它不适用于 PDO。

于 2013-07-23T15:16:11.190 回答
2

回答你的问题,

  1. mysql_real_escape_string只要您使用绑定就可以安全地省略(嗯....无论如何您都不能mysql_real_escape_string与 PDO 一起使用)

  2. 没有。这是绝对不安全的。无论您是否使用 PDO 都没关系。

于 2013-07-23T15:18:22.580 回答