Insérer plusieurs lignes avec pg-promise
L'insertion de plusieurs lignes dans une base de données avec une seule requête INSERT peut considérablement améliorer les performances. Dans pg-promise, il existe plusieurs méthodes que vous pouvez utiliser pour les insertions sur plusieurs lignes.
L'utilisation de ColumnSet et l'insertion d'assistants à partir de l'espace de noms des assistants est l'approche recommandée pour optimiser les performances. Tout d’abord, créez un objet ColumnSet, qui définit les colonnes dans lesquelles vous souhaitez insérer des données. Ensuite, utilisez l'assistant d'insertion pour générer la requête INSERT avec les valeurs fournies. La requête sera générée avec le nombre approprié d'espaces réservés de valeur et la clause VALUES contiendra les données fournies. Voici un exemple :
<code class="javascript">const cs = new ColumnSet(['col_a', 'col_b'], {table: 'tmp'}); const values = [{col_a: 'a1', col_b: 'b1'}, {col_a: 'a2', col_b: 'b2'}]; const query = insert(values, cs);</code>
Cela générera la requête INSERT suivante :
<code class="sql">INSERT INTO "tmp"("col_a","col_b") VALUES('a1','b1'),('a2','b2')</code>
Vous pouvez exécuter la requête en utilisant db.none(query).
Protection contre les injections SQL
Lors de l'utilisation de l'assistant d'insertion, les valeurs que vous fournissez sont automatiquement paramétrées, offrant une protection contre les injections SQL. Cependant, si vous insérez dynamiquement des noms de schéma/table/colonne, il est crucial d'utiliser des noms SQL pour éviter les attaques potentielles par injection SQL.
Insertion avec des valeurs de retour
Si vous souhaitez récupérer les ID générés ou toute autre valeur à partir d'une insertion multi-lignes, vous pouvez ajouter RETURNING à votre requête et l'exécuter à l'aide de db.many. Cela renverra un tableau d'objets contenant les données demandées.
Conclusion
L'utilisation de ColumnSet et d'insertion d'assistants avec des noms SQL fournit un moyen sécurisé et efficace d'effectuer plusieurs -insertions de lignes avec pg-promise.
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!