2010-04-20 6 views

Répondre

3

Un paramètre positionnel est défini par son index dans la clause.

Un paramètre nommé est défini par son nom. Lorsque vous définissez les valeurs, vous pouvez avoir les valeurs dans un tableau, auquel cas le formulaire de position pourrait me être plus utile. Vous pouvez également les avoir dans un tableau associatif par nom, auquel cas le formulaire nommé est plus utile.


Mise à jour - Bien que la documentation fait référence à des paramètres de position comme par exemple ?1, les exemples utilisent juste ?.

Cet exemple de paramètres positionnels mappe les valeurs par position dans le tableau fourni dans les espaces réservés de position dans la requête. Cependant, cet exemple mappe les valeurs par nom dans un tableau associatif à leurs espaces réservés nommés. Voyez comme ils n'ont pas besoin d'être en ordre.

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

(dois admettre que je ne suis pas un gars de PHP - ci-dessus sur la base des exemples here.)

+0

désolé de ne pas comprendre. quel indice dans la clause? et quels tableaux? pouvez-vous me dire ce que la fonction ci-dessus va faire? Je ne comprends toujours pas le u.id =? 1 partie. –

+0

'? 1' est un * espace réservé * dans la définition de la requête. Au moment de l'exécution, il sera remplacé par la première valeur de la liste des valeurs de paramètre. Dans l'exemple donné, '? 1' sera remplacé par 'Arnold' lorsque la requête sera exécutée. Le second exemple utilise des * paramètres nommés * dans le même but, ainsi ': nom d'utilisateur' sera remplacé par la valeur liée à 'nom d'utilisateur' dans la liste des paramètres d'exécution, dans ce cas également 'Arnold'. – DaveE

+0

@DaveE alors qu'est-ce qu'un? seul, comme dans les exemples que j'ai trouvés? Est-ce que fournir un nombre comme? 1 vous permet de les déclarer hors séquence dans la requête? – Brabster

0

Je ne Kown si je comprends bien, donc ce que je pense:

Les paramètres de position doivent être indexés à l'aide d'un index d'entier, et les paramètres nommés doivent être accessibles par leur nom.

Exemple (version pseudocode):

query.SetParameter (0, 456); // Ici, nous définissons la valeur 456 au premier paramètre, qui a l'index query.SetParameter ("nom d'utilisateur", "John Smith"); // ici, nous définissons la valeur "John Smith" au paramètre nommé "nom d'utilisateur"

1

Les paramètres de position sont spécifiés par leur ordre dans la requête. Les paramètres nommés sont spécifiés par leurs noms. Lorsque vous utilisez des paramètres positionnels, vous devez les ajouter dans le même ordre que celui utilisé dans la requête. Si vous souhaitez utiliser la même valeur plus d'une fois, vous devez l'ajouter plusieurs fois en tant que paramètres distincts. Lorsque vous utilisez des paramètres de noms, vous pouvez les ajouter dans l'ordre de votre choix, et un paramètre peut être utilisé plusieurs fois dans la requête.

Par exemple, si vous avez une requête qui recherche dans plusieurs domaines, en utilisant des paramètres de position, il pourrait ressembler à ceci:

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

Vous devez ajouter la chaîne de recherche trois fois en tant que paramètres séparés. L'utilisation de noms des paramètres, il pourrait ressembler à:

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

alors vous n'ajouter un paramètre, que la requête peut utiliser le même paramètre dans trois endroits.

(La syntaxe exacte pour l'utilisation des paramètres dans la requête du cours varie en fonction de quelle solution base de données que vous utilisez.)

+0

désolé mais je ne comprends pas. Pouvez-vous me donner un exemple très simple de la raison pour laquelle nous devrions l'utiliser? –

+0

@ajsie: J'ai ajouté un exemple ci-dessus. – Guffa

+0

merci pour l'explication! –

Questions connexes