我对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>";
}
我的不确定因素是:
由于
答案 0 :(得分: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
,如图所示。
P.S。对于(已弃用的)mysql_real_escape_string
扩展,mysql_
仅 。它不适用于PDO。
答案 1 :(得分:2)
回答你的问题,
只要你使用绑定就可以省略mysql_real_escape_string
(嗯......你无论如何都不能将mysql_real_escape_string
与PDO一起使用)< / p>
不。这绝对不安全。无论您是否使用PDO都无关紧要。