Dans la grammaire du SQL, il faut distinguer les litéraux des identifiants. Les litéraux désignent des valeurs alors que les identifiants désignent tout le reste.
Or $1,$2 etc.. ne peuvent remplacer que des litéraux et pas des identifiants.
C'est pourquoi le code suivant est valide:
INSERT INTO tbl(col1) VALUES($1)
alors que le code suivant ne l'est pas:
INSERT INTO $1(col1) VALUES(1234)
Lorsqu'on veut quand même utiliser des identifiants passés en paramètre dans des variables, il faut faire ce qu'on appelle du SQL dynamique, c.a.d construire une chaîne de caractères contenant l'intégralité de la requête, et passer cette chaîne en paramètre à l'instruction EXECUTE.
Partager