有什么不同"?"和":用户名"在PDO?

时间:2013-04-28 17:27:16

标签: php pdo

我有这样的语法

$query = "SELECT * FROM people WHERE username = ?";
$username = "foo";
$stmt->execute(array($username));

$query = "SELECT * FROM people WHERE username = :username";
$params = array(":username"=>"foo");
$stmt->execute($params);

1 个答案:

答案 0 :(得分:3)

没有区别

:username一个只是PDO支持的语法糖,它内部替换为文字?或转义数据取决于设置(PDO::ATTR_EMULATE_PREPARES一个)

人们普遍认为命名占位符更具可读性。但是,在我看来,他们只会使代码不必要地膨胀而根本不添加可读性。重复相同的字段名称六次不会​​使代码可读。如果你在查询中有超过3-5个占位符 - 现在是时候考虑一​​些自动化,一个循环的exapmle。

正如sachleen在评论中指出的那样,唯一的区别是绑定数据的可能顺序。

对于常规?占位符,您必须遵循严格的顺序,而对于命名占位符,您可以按任何顺序绑定它们:

$stm = $pdo->prepare("SELECT name FROM table WHERE name=? AND age=?");
$stm->execute(array($name,$age)); // strict order matching one in the query

$stm = $pdo->prepare("SELECT name FROM table WHERE name=:name AND age=:age");
$stm->execute(array(":age"=>$age,":name"=>$name)); // whatever order