Exécuter une requête d'insertion à l'aide d'instructions préparées et de noms de tables dynamiques
L'utilisation d'instructions préparées pour effectuer efficacement des requêtes par lots est très pratique lorsque vous devez insérer des données dans plusieurs tables avec des structures de colonnes similaires. Toutefois, la tâche devient plus complexe lorsque le nom de la table cible doit changer dynamiquement.
Comme mentionné dans la question d'origine, une approche consiste à créer une chaîne de requête contenant des espaces réservés pour les valeurs de champ et les noms de table :
<code>String strQuery = "INSERT INTO ? (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);";</code>
Bien que cette approche permette l'insertion dynamique des valeurs de champ, elle présente des inconvénients lors de la tentative de modification du nom de la table. Les instructions préparées sont conçues pour exécuter un modèle de requête prédéterminé à l'aide de données variables. Ils ne prennent pas en charge les modifications dynamiques de la structure de requête elle-même (y compris les noms de tables).
La solution à ce problème consiste à utiliser la concaténation de chaînes ou des espaces réservés combinés avec String.format :
<code>String tableName = "tableName1"; String query = String.format("INSERT INTO %s (col1, col2, col3, col4, col5) VALUES (?,?,?,?,?,?);", tableName);</code>
Vous pouvez définir dynamiquement la table cible pour chaque opération d'insertion en concaténant le nom de la table directement dans la chaîne de requête. Cette approche n'est peut-être pas aussi concise que l'utilisation d'instructions préparées dans tous les cas, mais elle offre la flexibilité d'utiliser un seul modèle de requête pour insérer des données dans différentes tables.
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!