Mysql
 sql >> Base de données >  >> RDS >> Mysql

PDO :Passer une fonction MySQL à bindValue/bindParam

Non. Un paramètre de requête ne remplace qu'une seule valeur constante. Par exemple, une constante numérique ou une chaîne littérale ou une date.

Tout le reste -- noms de colonnes, noms de tables, mots clés SQL, fonctions, expressions -- doit se trouver dans la chaîne SQL au moment de l'analyse.

Concernant votre commentaire :

Vous devez comprendre que les paramètres ne sont pas juste une commodité pour interpoler des chaînes supplémentaires dans votre SQL. PREPARE est analogue à une phase de compilation pour Java ou C#, alors que EXECUTE est analogue à l'exécution du code compilé.

Le temps de préparation correspond au moment où le SGBDR effectue la vérification de la syntaxe et également la validation des références. Il doit donner une erreur si vous nommez une table qui n'existe pas, ou appelez une fonction qui n'existe pas.

Vous ne pouvez pas passer de noms de table ou d'appels de fonction en tant que paramètres, car le SGBDR ne serait alors pas en mesure de valider ces références au moment de la préparation. Vous ne devriez pas pouvoir utiliser un paramètre de requête pour modifier la syntaxe de l'instruction ou introduire des tables ou des fonctions non valides.

Ainsi, l'espace réservé du paramètre doit être un élément syntaxique irréductible qui n'est jamais une référence invalide, c'est-à-dire une valeur littérale unique -- un nombre ou une chaîne.