Le meilleur moyen d'insérer plusieurs valeurs dans mysqli?
Je suis à la recherche d'une injection de code SQL-secure technique pour insérer un grand nombre de lignes (ca. 2000) à la fois avec PHP et MySQLi.
J'ai un tableau avec toutes les valeurs à inclure.
Actuellement, je suis en train de faire:
<?php
$array = array("array", "with", "about", "2000", "values");
foreach ($array as $one)
{
$query = "INSERT INTO table (link) VALUES ( ?)";
$stmt = $mysqli->prepare($query);
$stmt ->bind_param("s", $one);
$stmt->execute();
$stmt->close();
}
?>
J'ai essayé call_user_func_array()mais il a provoqué une stackoverflow.
Quelle est la méthode la plus rapide pour ce faire (comme l'insertion de tous à la fois?), mais toujours en sécurité par rapport à SQL-injection (comme une déclaration préparée à l'avance) et stackoverflows?
Merci!!!!
source d'informationauteur Roman Holzner | 2013-03-01
Vous devez vous connecter pour publier un commentaire.
Vous devriez être en mesure d'augmenter considérablement la vitesse en mettant votre insère à l'intérieur d'une transaction. Vous pouvez également déplacer votre de les préparer et de lier des déclarations en dehors de la boucle.
Edit:
J'ai testé ce code avec 10 000 itérations sur mon serveur web.
Sans transaction:
226 seconds.
Avec la transaction:
2 seconds.
Ou un
two order of magnitude speed increase
, au moins pour ce test.Essayer encore une fois, je ne vois pas pourquoi ton code ne fonctionne pas avec des modifications mineures:
Oui, vous pouvez créer une seule requête manuellement, avec quelque chose comme:
Vous devez d'abord convertir votre tableau en une chaîne de caractères. Étant donné que c'est un tableau de chaînes de caractères (pas les deux dimensions de la matrice de), vous pouvez utiliser le imploser fonction.
S'il vous plaît être conscient que chaque valeur doit être placée entre parenthèses et bien échappé à assurer un bon
INSERT
du compte de résultat et éviter les risques d'injection SQL. Pour une bonne échapper, vous pouvez utiliser le citation méthode de laPDOConnection
-- en supposant que vous êtes connecter à MySQL via PDO. Pour effectuer cette opération sur chaque entrée de votre tableau, vous pouvez utiliser array_map.Après avoir échappé chaque valeur et implose en une seule chaîne, vous devez les mettre dans le
INSERT
déclaration. Cela peut être fait avec sprintf.Exemple:
Note: en fonction de la quantité de documents que vous êtes prêt à insérer dans la base de données, vous pouvez les diviser en plusieurs
INSERT
consolidés.