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

違いはありません

:usernameone は PDO でサポートされている単なる構文糖衣?であり、設定に応じてリテラルまたはエスケープされたデータで内部的に置換されます ( PDO::ATTR_EMULATE_PREPARESone)

名前付きプレースホルダーの方が読みやすいというのは、広く信じられていることです。しかし、私の意見では、コードを不必要に肥大化させるだけで、読みやすさはまったく追加されません。同じフィールド名を 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
于 2013-04-28T17:28:22.680 に答える