查询中的位置和命名参数是什么意思?

nev*_*ame 4 sql dql

这里我们得到了一个位置参数:

SELECT 
u 
FROM ForumUser u 
WHERE u.id = ?1
Run Code Online (Sandbox Code Playgroud)

这里有一个命名参数:

SELECT 
u 
FROM ForumUser u 
WHERE u.username = :name
Run Code Online (Sandbox Code Playgroud)

这是 DQL(学说查询语言),但我认为概念是相同的。

有人可以解释一下这些是什么意思吗?

bra*_*ter 6

位置参数由其在子句中的索引设置。

命名参数由其名称设置。

当您设置值时,您可能将值放在数组中,在这种情况下,位置形式可能更有用。或者,您可以按名称将它们放在关联数组中,在这种情况下,命名形式更有用。


更新 - 虽然文档中引用了位置参数作为示例?1,但示例只是使用?.

此位置参数示例按提供的数组中的位置将值映射到查询中的位置占位符中。

$q = Doctrine_Query::create()
  ->from('User u')
  ->where('u.username = ? and u.age = ?', array('Arnold', 50));

$users = $q->fetchArray();
Run Code Online (Sandbox Code Playgroud)

但是,此示例按关联数组中的名称将值映射到它们的命名占位符。看看他们如何不需要 tgo 有序。

$q = Doctrine_Query::create()
  ->from('User u')
  ->where('u.username = :username  and u.age = :age',
      array(':age' => 50, ':username' => 'Arnold'));
Run Code Online (Sandbox Code Playgroud)

(不得不承认我不是 PHP 人 - 以上基于此处的示例。)