ここで、位置パラメータを取得しました。
SELECT
u
FROM ForumUser u
WHERE u.id = ?1
そしてここに名前付きパラメータ:
SELECT
u
FROM ForumUser u
WHERE u.username = :name
これはDQL(ドクトリンクエリ言語)ですが、概念は同じだと思います。
誰かがこれらが何を意味し、何をするのか説明してもらえますか?
位置パラメータは、句内のインデックスによって設定されます。
名前付きパラメーターは、その名前で設定されます。
値を設定するとき、配列に値がある場合があります。その場合、位置形式の方が便利です。または、名前で連想配列に入れることもできます。その場合は、名前付きの形式の方が便利です。
更新-ドキュメントでは、たとえばのように位置パラメータについて言及していますが、例?1
では単にを使用しています?
。
この位置パラメーターの例では、クエリの位置プレースホルダーに指定された配列内の位置ごとに値をマップします。
$q = Doctrine_Query::create()
->from('User u')
->where('u.username = ? and u.age = ?', array('Arnold', 50));
$users = $q->fetchArray();
ただし、この例では、連想配列の名前で値を名前付きプレースホルダーにマップします。彼らがどのように順番にtgoする必要がないかを見てください。
$q = Doctrine_Query::create()
->from('User u')
->where('u.username = :username and u.age = :age',
array(':age' => 50, ':username' => 'Arnold'));
(私はPHPの男ではないことを認めなければなりません-上記の例に基づいています。)
位置パラメータは、クエリ内の順序で指定されます。名前付きパラメーターは、その名前で指定されます。
位置パラメータを使用する場合は、クエリで使用されるのと同じ順序で追加する必要があります。同じ値を複数回使用する場合は、個別のパラメータとして複数回追加する必要があります。
名前パラメータを使用する場合は、任意の順序で追加でき、クエリでパラメータを複数回使用できます。
たとえば、位置パラメータを使用して複数のフィールドを検索するクエリがある場合、次のようになります。
select u.UserId, u.UserName
from FormumUser u
where u.UserName like ? or u.Email like ? or u.Address like ?
検索文字列を個別のパラメータとして3回追加する必要があります。名前パラメータを使用すると、次のようになります。
select u.UserId, u.UserName
from FormumUser u
where u.UserName like @find or u.Email like @find or u.Address like @find
次に、クエリは3つの場所で同じパラメータを使用できるため、パラメータを1つだけ追加します。
(もちろん、クエリでパラメータを使用するための正確な構文は、使用しているデータベースソリューションによって異なります。)
私が正しく理解したかどうかわからないので、これは私が思うことです:
位置パラメータは整数インデックスを使用してインデックス付けする必要があり、名前付きパラメータには名前を使用してアクセスする必要があります。
例(これは擬似コードです):
query.SetParameter(0、456); //ここでは、値456をインデックスゼロの最初のパラメーターに設定します。query.SetParameter( "username"、 "John Smith"); //ここでは、値「JohnSmith」を「username」という名前のパラメータに設定します