Supposons que nous ayons une procédure stockée SetCustomerName qui a un paramètre d'entrée Name et que j'ai une table clients avec le nom de la colonne. Donc, dans ma procédure stockée, je veux définir le nom du client. Si j'écrisMySQL: Lorsque le nom du paramètre de la procédure stockée est identique au nom de la colonne du tableau
UPDATE customers SET Name = Name;
ce qui est faux et je vois 2 autres façons:
UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;
D'abord on travaille, mais je ne trouve pas dans la documentation que je peux envelopper les paramètres à l'intérieur `caractères. Ou l'ai-je manqué dans la documentation (lien apprécié dans ce cas).
De quelles autres façons y at-il et quel est le moyen standard pour un tel cas? Renommer le paramètre d'entrée n'est pas bon pour moi (parce que j'ai un mappage objet-relationnel automatique si vous savez ce que je veux dire).
MISE À JOUR:
Donc, il y a un lien à propos de (http://dev.mysql.com/doc/refman/5.0/en/identifiers.html) des accents graves mais il n'expliqué assez profond comment les utiliser (comment les utiliser avec les paramètres et les noms de colonnes).
Et il y a une chose très étrange (au moins pour moi): Vous pouvez utiliser des accents graves de toute façon:
UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;
et ils travaillent tous absolument de la même manière.
Ne trouvez-vous pas cela étrange? Est-ce que ce comportement étrange est expliqué quelque part?
** Ne faites pas ça! ** Voulez-vous vraiment construire le SQL en utilisant la concaténation de chaînes? Qu'en est-il de l'injection SQL? – ADTC
@ADTC, vous plaisantez? Pour exécuter cette procédure stockée, vous devez déjà être dans le sous-système SQL. Par conséquent, vous pouvez exécuter à peu près n'importe quelle requête que vous aimez. PLUS c'est une déclaration préparée. L'un des principaux avantages des instructions préparées est qu'elles empêchent l'injection SQL. –
Si vous enchaînez des chaînes pour faire une déclaration, alors "préparez-la" (sans aucun paramètre), ce n'est pas une déclaration préparée, c'est juste une déclaration prétendant être préparée. – ADTC