Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/266.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 不带mysql\u real\u escape\u字符串和bindValue的PDO_Php_Pdo - Fatal编程技术网

Php 不带mysql\u real\u escape\u字符串和bindValue的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']),

我对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>";
}
$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,所以在第一行中省略mysql_real_escape_字符串安全吗
  • 在不使用绑定值的情况下按上述方式运行查询是否安全

  • 谢谢

    不,这不安全。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()