Supponiamo che una stored procedure SetCustomerName abbia un parametro di input Name e che disponga di una tabella clienti con nome colonna. Quindi all'interno della mia stored procedure voglio impostare il nome del cliente. Se scrivoMySQL: quando il nome del parametro della procedura memorizzata è uguale al nome della colonna della tabella
UPDATE customers SET Name = Name;
questo non è corretto e vedo 2 altri modi:
UPDATE customers SET Name = `Name`;
UPDATE customers SET customers.Name = Name;
Primo uno funziona, ma non ho trovato nella documentazione che posso avvolgere parametri all'interno `caratteri. O mi mancava nella documentazione (il link è apprezzato in questo caso).
Quali altri modi ci sono e qual è il modo standard per un caso del genere? Rinominare i parametri di input non mi fa bene (perché ho una mappatura relazionale oggettuale se sai cosa intendo).
UPDATE:
Quindi, c'è un link su apici inversi (http://dev.mysql.com/doc/refman/5.0/en/identifiers.html) ma non è spiegato abbastanza in profondità come usarli (come usarli con i parametri e nomi di colonna).
E c'è una cosa molto strana (almeno per me): È possibile utilizzare backticks in entrambi i casi:
UPDATE customers SET Name = `Name`;
//or
UPDATE customers SET `Name` = Name;
//or even
UPDATE customers SET `Name` = `Name`;
e tutti lavorare assolutamente allo stesso modo.
Non pensi che sia strano? Questo strano comportamento è spiegato da qualche parte?
** Non farlo! ** Vuoi veramente costruire l'SQL usando la concatenazione di stringhe? Che mi dici dell'iniezione SQL? – ADTC
@ADTC, stai scherzando? Per poter eseguire questa stored procedure devi già essere nel sottosistema SQL. Quindi puoi eseguire quasi tutte le query che ti piacciono. PIÙ questa è una dichiarazione preparata. Uno dei principali vantaggi delle dichiarazioni preparate è che impediscono l'iniezione SQL. –
Se si concatenano le stringhe per fare una dichiarazione, quindi "prepararla" (senza alcun parametro di sorta), non è una dichiarazione preparata, è solo un'affermazione che pretende di essere preparata. – ADTC