Maison >développement back-end >tutoriel php >Les instructions préparées peuvent-elles utiliser des noms de tables dynamiques dans SQL ?
Les instructions préparées peuvent-elles gérer les noms de table dynamiques ?
Vous avez malheureusement tenté d'exécuter une instruction préparée MySQL avec un espace réservé dans le nom de la table ? , il ne s'agit pas d'une fonctionnalité prise en charge. Les instructions préparées sont conçues pour lier des paramètres aux sections « valeur » d'une instruction SQL, plutôt qu'à des éléments structurels tels que des noms de table.
Au niveau de la base de données, la modification du nom de la table peut modifier la validité de l'instruction, ce qui dépasse le cadre de la précompilation. Même dans les interfaces de base de données qui permettent d'utiliser des espaces réservés n'importe où, la valeur de l'espace réservé est toujours convertie en chaîne, donc SELECT * FROM ? enverra en fait du SQL invalide (c'est-à-dire `SELECT * FROM 'mytable' ' ).
La meilleure pratique pour éviter cette injection est d'utiliser la vérification de la liste blanche. Avant de créer la requête, vérifiez que le nom de table saisi figure dans la liste pré-approuvée. Cela garantira que seuls des noms de table sûrs sont utilisés, atténuant ainsi le risque d'injection SQL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!