Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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
Variables 在PDO查询中将变量设置为列的值 什么时候应该在PDO查询中将变量设置为列的值? 以下代码之间的区别是什么?_Variables_Pdo - Fatal编程技术网

Variables 在PDO查询中将变量设置为列的值 什么时候应该在PDO查询中将变量设置为列的值? 以下代码之间的区别是什么?

Variables 在PDO查询中将变量设置为列的值 什么时候应该在PDO查询中将变量设置为列的值? 以下代码之间的区别是什么?,variables,pdo,Variables,Pdo,: 以及: 查询中的值不会来自用户。无论以何种方式运行,代码都是相同的 但是 理想情况下,您希望使用位置参数和准备好的语句。。。这应该会让你开始,这是我写的do it all函数的部分复制/粘贴,我在任何地方都使用它。强烈鼓励你自己写,或者找一个写一次,包括很多,需要时修复一次 $dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8',

:

以及:


查询中的值不会来自用户。

无论以何种方式运行,代码都是相同的

但是

理想情况下,您希望使用位置参数和准备好的语句。。。这应该会让你开始,这是我写的do it all函数的部分复制/粘贴,我在任何地方都使用它。强烈鼓励你自己写,或者找一个写一次,包括很多,需要时修复一次

    $dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8', $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query="SELECT count(*) FROM myTable WHERE entry_type = ?");
    $parameters=array("post");
    $result = $dbconn->prepare($query);
    $result->execute($arr);
    if(!$result){
      die("Query error:".$dbconn->errorInfo());
    }
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
       $dataRetrieved[] = $row;
    }
编辑-


发问者在下面的评论中问道——有些人对我说,如果值不是来自客户端,则不需要放置占位符。你做到了。为什么?似乎每个人都有自己的看法

嗯。。。符合事实的如果您正在运行静态查询,则不需要参数化或使用准备好的语句等,因为您可以完全控制正在使用/查询的内容等


但回到写一次,包括所有地方,需要时在一个地方修复。。。如果我在任何地方使用我的函数或类,它需要能够处理使用用户生成输入的查询以及静态和已知安全的查询。因此,即使不是严格需要,事情也总是参数化的。

有些人对我说,如果值不是来自客户端,就不需要放置占位符。你做到了。为什么?似乎每个人都有自己的观点…@Susi-正确,如果您控制输入,您不需要参数化和准备语句来防止SQL注入。无论如何,我会编辑我的答案,包括一些好的理由。
$type = 'post';
$stmtPG = $conn->query("SELECT count(*) FROM myTable WHERE entry_type = '$type'");    
$total = $stmtPG->fetchColumn();
    $dbconn = new PDO('mysql:host=' . $hostname . ';port=' . $dbPort . ';dbname=' . $dbName . ';charset=utf8', $username, $password, array(PDO::MYSQL_ATTR_FOUND_ROWS => true));
    $dbconn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $query="SELECT count(*) FROM myTable WHERE entry_type = ?");
    $parameters=array("post");
    $result = $dbconn->prepare($query);
    $result->execute($arr);
    if(!$result){
      die("Query error:".$dbconn->errorInfo());
    }
    while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
       $dataRetrieved[] = $row;
    }