Mysqli plusieurs lignes d'insertion, simple, multi requête d'insertion
Comment puis-je insérer cette requête avec mysqli?...
INSERT INTO table (field1, field2, field3) VALUES ('value', 'value', 'value'), ('value', 'value', 'value'), ('value', 'value', 'value');
Normalement dans mysql cette requête est simple et insert, 3 rangées, comment dois-je faire en mysqli sans l'aide d'une requête préparée ou peut-être à l'aide d'une requête préparée, mais sans se faire trop compliqué?. Je souhaite juste savoir si il existe un moyen pour exécuter cette requête sans faire supplémentaire des trucs funky en PHP.
En essence, j'ai quelques données extraites qui a autour de 10 lignes par insert (et aussi des besoins multiples insertions en plus d'avoir plusieurs lignes), et c'est ce que j'en ai besoin pour. Je ne souhaite qu'à se faire avec une requête comme je l'ai normalement fait avec mysql, et de ne pas ajouter de multiples insérer un pour chaque ligne.
Stocker l'instruction SQL dans une variable et le passer à la mysqli_query comme un paramètre;
Sajuna malheureusement, il ne peut pas être fait de cette manière. Mysqli n'est pas le même que mysql.
Essayé d'utiliser mysql alors qu'il y a une connexion mysqli ouvrir, n'est-ce pas!.
OriginalL'auteur user1675155 | 2013-10-22
Vous devez vous connecter pour publier un commentaire.
La classe mysqli fournit un certain nombre de façons différentes d'accomplir vos inserts, chacun avec ses propres avantages. Certainement, l'un d'eux doit s'adapter à vos besoins.
Les exemples suivants supposent que votre indéterminée "extrait des données est stockée dans un tableau de tableaux: $bigArray[0...datasetsize][0...2].
La mysqli base de données est estimée à $db.
Méthode 1 - La Vieille École
Vous pouvez le faire directement en avant comme vous êtes habitués à par tout simplement la construction de votre chaîne de requête et l'interrogation de la base de données. Les Inserts sont regroupés de 10 à la fois, comme vous l'avez spécifié. Le code suivant illustre un tel bundle et est trivialement étendu à l'ensemble du jeu de données (bigArray). Les données devraient probablement être échappé à l'aide de mysqli::escape_string (pas fait ici).
L'insertion de données est supposé être des entiers dans tous les exemples.
Méthode 2 - Aussi Simple Que Possible
Si vous souhaitez utiliser une instruction préparée et la liaison de paramètres, un premier effort pourrait ressembler à l'exemple suivant. Tout n'est pas optimal, la déclaration est seulement une fois. Cependant, les variables sont liées à chaque insertion, ce qui est un gaspillage (mais simple). Depuis les insertions ne sont pas regroupées, à l'exemple des boucles de plus de 10.
Méthode 3 - Optimisé
Préparées et de plusieurs insertions combinées permettent de performance qui est presque identique à l'premières requêtes de type insert de la Méthode 1. Les résultats réels peuvent varier selon votre configuration, mais un test rapide sur mon système à la fois local et à distance de la base de données a montré les performances de quelques points de pourcentage plus rapide avec la méthode optimisée, l'augmentation de quelques points de plus, si les données dans la Méthode 1 a besoin d'être échappé.
Les utilisations suivantes call_user_func_array, mais vous pourriez éviter que si vous savez comment de nombreux inserts vous souhaitez regrouper à chaque fois et de construire appeler bind_param directement. Qui permettrait d'augmenter légèrement les performances.
Pour plus de clarté, cet exemple comprend la boucle externe et n'assume 10k total de lignes à insérer (c'est à dire bigArray[0..9999][0..2]).
mais comment voulez-vous faire face avec Method1 ou Method2, si les Données sont pas stockée dans un array, mais dans un JSON de l'objet? Comment découper les centaines ou les milliers d'ensembles de données JSON en morceaux de 10 à insérer à la fois?
qu'est-ce que $f dans la réponse ?
OriginalL'auteur fyo
Mysqli n'est pas une base de données de son propre, mais seulement un ensemble de fonctions pour envoyer votre requête à mysql.
Si l'on utilise mysqli vous pouvez exécuter n'importe quelle requête mysql.
Toutefois, en cas de dynamiquement des valeurs fournies vous ne pouvez pas éviter les "extra funky stuff en PHP" comme vous êtes supposé utiliser préparées. Et, malheureusement, raw mysqli n'est pas facile avec eux.
Ainsi, pour effectuer une telle insertion, vous devez créer une requête avec des espaces réservés première
INSERT INTO table (champ1,champ2,champ3) VALEURS (?, ?, ?), (?, ?, ?), (?, ?, ?);
puis de lier toutes les valeurs à l'aide de
call_user_func_array()
et enfin
execute
;Vous n'avez pas répondu à sa question. Comment puis-je insérer cette requête avec mysqli?...
Trouvé une question similaire: stackoverflow.com/questions/15575405/... mais toujours pas de solution!!!!
OriginalL'auteur Your Common Sense