Pregunta

Aquí tenemos un parámetro posicional:

SELECT 
u 
FROM ForumUser u 
WHERE u.id = ?1

y aquí un parámetro denominado:

SELECT 
u 
FROM ForumUser u 
WHERE u.username = :name

Este es DQL (doctrina lenguaje de consulta), pero creo que el concepto es el mismo.

podría alguien explicarme lo que significan y hacer?

¿Fue útil?

Solución

A parámetro de posición es fijado por su índice en la cláusula.

Un parámetro denominado está establecido por su nombre.

Al configurar los valores, es posible que tenga los valores en una matriz, en cuyo caso la forma posicional podía yo más útil. Alternativamente, es posible tenerlos en una matriz asociativa por su nombre, en cuyo caso el formulario denominado es más útil.


Update -. Aunque la documentación se refiere a parámetros posicionales como por ejemplo ?1, los ejemplos sólo tiene que utilizar ?

Este ejemplo de parámetros posicionales mapea los valores de posición en la matriz proporcionado en los marcadores de posición de posición de la consulta.

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

$users = $q->fetchArray();

Sin embargo, este ejemplo se asigna valores por su nombre en una matriz asociativa a sus marcadores de posición con nombre. Vea como que no necesitan estar en orden TGO.

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

(que admitir que no soy un tipo de PHP - por encima basa en los ejemplos aquí .)

Otros consejos

Los parámetros posicionales se especifican por su orden en la consulta. Los parámetros con nombre son especificados por sus nombres.

Cuando se utilizan los parámetros de posición que tiene que añadirlos en el mismo orden en que se utilizan en la consulta, y si desea utilizar el mismo valor más de una vez hay que añadir que en múltiples ocasiones como parámetros separados.

Cuando se utilizan nombres de parámetros se puede añadir en cualquier orden que desee, y un parámetro puede ser utilizado más de una vez en la consulta.

Por ejemplo, si tiene una consulta que busca en varios campos, utilizando parámetros posicionales que podrían tener este aspecto:

select u.UserId, u.UserName
from FormumUser u
where u.UserName like ? or u.Email like ? or u.Address like ?

tendría que añadir el texto a buscar tres veces más parámetros separados. El uso de nombres de parámetros que podría tener este aspecto:

select u.UserId, u.UserName
from FormumUser u
where u.UserName like @find or u.Email like @find or u.Address like @find

A continuación, sólo añadiría un parámetro, como la consulta puede utilizar el mismo parámetro en tres lugares.

(La sintaxis exacta para el uso de los parámetros de la consulta, por supuesto, varía dependiendo de qué solución de base de datos que está utilizando.)

Yo no surgir en el curso si he entendido bien, así que esto es lo que pienso:

Los parámetros posicionales deben ser indexados usando un índice entero, y parámetros con nombre deben acceder a través de sus nombres.

Ejemplo (esto es pseudocódigo):

query.SetParameter (0, 456); // Aquí establecemos el valor 456 al primer parámetro, que tiene cero índice query.SetParameter ( "nombre de usuario", "John Smith"); // Aquí establecemos el valor "John Smith" para el parámetro llamado "nombre de usuario"

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top