Справка по escape-строке MySQL - PullRequest
0 голосов
/ 11 мая 2010

У меня довольно большой оператор вставки, похожий на

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

Как мне подготовить запрос для MySQL. Это слишком долго, чтобы делать это вручную. Он содержит двойные кавычки, поэтому я не могу использовать функцию php mysql_real_escape_string ()

Ответы [ 3 ]

2 голосов
/ 11 мая 2010

Почему вы хотите вставить все записи одним оператором? Вы можете использовать подготовленное утверждение: INSERT INTO multimedia (имя файла, регулярное выражение, флаг) VALUES (?,?,?);

и цикл for для вставки записей одна за другой.

Я не программист PHP, но код может выглядеть следующим образом (части взяты из 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();
}

Используя подготовленный оператор, СУБД компилирует SQL только один раз, как это было бы с вашим оператором SQL. Чтобы убедиться, что все или никакие записи вставлены (если вам все равно нужно такое утверждение), используйте транзакцию.

Кроме того, это также решит проблему с экранированием, поскольку вам не нужно помещать значения в строку. Строка для подготовленного оператора определяет только SQL-шаблон.

0 голосов
/ 11 мая 2010

если ваши данные хранятся в файле, разделенном запятыми, вы можете использовать LOAD DATA INFILE query

Пример этих данных может помочь.

0 голосов
/ 11 мая 2010

вы можете попробовать этот способ выполнить несколько вставок в одном запросе ...

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

mysql_query( $sql);
...