将变量设置为PDO查询中的列值

时间:2018-09-24 19:11:16

标签: variables pdo

  • 何时应在PDO查询中将变量设置为列的值?
  • 下面的代码有什么区别?

$stmtPG = $conn->query("SELECT count(*) FROM myTable WHERE entry_type = 'post'");    
$total = $stmtPG->fetchColumn();

并且:

$type = 'post';
$stmtPG = $conn->query("SELECT count(*) FROM myTable WHERE entry_type = '$type'");    
$total = $stmtPG->fetchColumn();

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

1 个答案:

答案 0 :(得分:1)

无论运行哪种方式,该代码都相同。

但是...

理想情况下,您希望使用位置参数和准备好的语句...这应该可以帮助您,这是我编写的“随便做”功能的部分复制/粘贴,我在任何地方都使用过。强烈建议您自己编写或找到一个(写一次,包括很多,在需要时修复一次!)。

    $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;
    }

编辑-

发问者在下面的评论中提问-“有些人对我说,如果价值不是来自客户端,则不需要放置占位符。您这样做了。为什么?看来每个人有自己的见解...“

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

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