違いはありません
:username
one は PDO でサポートされている単なる構文糖衣?
であり、設定に応じてリテラルまたはエスケープされたデータで内部的に置換されます ( PDO::ATTR_EMULATE_PREPARES
one)
名前付きプレースホルダーの方が読みやすいというのは、広く信じられていることです。しかし、私の意見では、コードを不必要に肥大化させるだけで、読みやすさはまったく追加されません。同じフィールド名を 6 回繰り返しても、コードが読めなくなります。クエリに 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