Question

J'ai une assez grande chose instruction d'insertion comme

INSERT INTO multimedia (filename, regex, flag) VALUES (('adsfavr.jpg', '<div id="title">', 0), (...), (...));

Comment préparer la requête trop longtemps de MySQL.It de le faire manuellement. Il comprend des guillemets doubles, donc je ne peux pas utiliser la fonction php mysql_real_escape_string ()

Était-ce utile?

La solution

Pourquoi voulez-vous d'insérer tous les enregistrements avec une seule déclaration? Vous pouvez utiliser une déclaration préparée:     INSERT INTO multimédia (nom de fichier, regex, drapeau) VALUES (?,??);

et un pour-boucle pour insérer les enregistrements un par un.

Je ne suis pas un programmeur PHP, mais le code pourrait ressembler à ceci (parties prises http://php.net/manual/en/pdo.prepared-statements.php ):

$stmt = $dbh->prepare("INSERT INTO multimedia (filename, regex, flag) VALUES (:filename, :regex, :flag)");
$stmt->bindParam(':filename', $filename);
$stmt->bindParam(':regex', $regex);
$stmt->bindParam(':flag', $flag);

for ( $i = 1; $i <= ...; $i++) {
    $filename = ...
    $regex = ...
    $flag = ...

    $stmt->execute();
}

En utilisant une instruction préparée, le SGBD compile une seule fois le SQL, comme il le ferait avec votre instruction SQL. Pour se assurer que tout ou pas d'enregistrements sont insérés (si vous avez besoin d'une telle affirmation de toute façon), utiliser une transaction.

En outre, cela aussi résoudre votre problème s'échapper, puisque vous n'avez pas besoin de mettre les valeurs dans une chaîne. La chaîne pour une instruction préparée définit uniquement le SQL « modèle ».

Autres conseils

si vos données sont stockées dans un fichier séparé par des virgules, vous pouvez utiliser la requête LOAD DATA INFILE

Un échantillon de ces données pourrait aider.

vous pouvez essayer cette façon d'exécuter plusieurs inserts en une seule requête ...

$sql = "INSERT INTO users (name, age)
  VALUES
  ('Helen', 24),
  ('Katrina', 21),
  ('Samia', 22)";

mysql_query( $sql);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top