0

我有这样的语法

$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);
4

1 回答 1

3

没有区别

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

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

正如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
于 2013-04-28T17:28:22.680 回答