Php 不带mysql\u real\u escape\u字符串和bindValue的PDO
我对PDO比较陌生,我编写了以下代码块:Php 不带mysql\u real\u escape\u字符串和bindValue的PDO,php,pdo,Php,Pdo,我对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']),
$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>";
}
$id=$\u GET['id'];
$db=newpdo('mysql:host=localhost;dbname=testdb;charset=utf8','username','password');
foreach($db->query(“从名称中选择id,名称,其中id='$id'))作为$row){
回声“”,($row['name']),“
”;
}
我的不确定性是:
谢谢不,这不安全。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>";
}
}
$stmt=$db->prepare('SELECT id,name FROM names where id=?');
如果($stmt->execute(数组($id))){
而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
回声“”,($row['name']),“
”;
}
}
因此,是的,您需要使用bindParam
或execute
,如图所示
另外,
mysql\u real\u escape\u string
仅适用于(已弃用的)mysql\u扩展。它不适用于PDO。不,这不安全。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>";
}
}
$stmt=$db->prepare('SELECT id,name FROM names where id=?');
如果($stmt->execute(数组($id))){
而($row=$stmt->fetch(PDO::fetch\U ASSOC)){
回声“”,($row['name']),“
”;
}
}
因此,是的,您需要使用bindParam
或execute
,如图所示
另外,mysql\u real\u escape\u string
仅适用于(已弃用的)mysql\u扩展。它不适用于PDO。要回答您的问题
只要您使用mysql\u real\u escape\u string
,就可以安全地省略mysql\u real\u escape\u string
(好吧……无论如何,您不能在PDO中使用mysql\u real\u escape\u string
)
没有。这绝对不安全。不管您是否使用PDO
为了回答你的问题
只要您使用mysql\u real\u escape\u string
,就可以安全地省略mysql\u real\u escape\u string
(好吧……无论如何,您不能在PDO中使用mysql\u real\u escape\u string
)
没有。这绝对不安全。不管您是否使用PDO
mysql\u real\u escape\u string
与PDO没有连接;不要使用。信息技术Re 2。不,不是safe@Pekka,为什么不留下答案?@JasonMcCreary因为佩卡的重复次数太多了。。。。给像我们这样的新手留点东西哈哈。mysql\u real\u escape\u string
与PDO没有任何联系;不要使用。信息技术Re 2。不,不是safe@Pekka,为什么不留下答案?@JasonMcCreary因为佩卡的重复次数太多了。。。。给像我们这样的新手留点东西,哈哈。我会把这个作为答案,但是你介意澄清两件事吗:1。有没有办法让你的代码简单一点2。在没有变量的情况下也可以使用这种方法吗?谢谢。你想要多简单?有什么复杂的?如果没有要绑定的变量,那么使用->query()
就完全可以了。我会将此标记为答案,但您是否介意澄清两件事:1。有没有办法让你的代码简单一点2。在没有变量的情况下也可以使用这种方法吗?谢谢。你想要多简单?有什么复杂的?如果没有要绑定的变量,那么可以使用->query()
。