我有这样的语法
$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);
答案 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