Pergunta

Eu tenho uma declaração de inserção bastante grande, algo como

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

Como faço para preparar a consulta para o mysql. É muito tempo para fazê -lo manualmente. Inclui citações duplas, então não posso usar a função php mysql_real_escape_string ()

Foi útil?

Solução

Por que você deseja inserir todos os registros com uma única declaração? Você poderia usar uma declaração preparada: inserir em valores multimídia (nome do arquivo, regex, sinalizador) (?,?);

e um loop para inserir os registros um por um.

Eu não sou um programador PHP, mas o código pode ficar assim (peças tiradas de 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();
}

Usando uma instrução preparada, o DBMS compila apenas o SQL uma vez, como faria com sua instrução SQL. Para ter certeza de que todos ou nenhum registro são inseridos (se você precisar dessa afirmação de qualquer maneira), use uma transação.

Além disso, isso também resolveria seu problema de fuga, pois você não precisa colocar os valores em uma string. A string para uma instrução preparada define apenas o "modelo" SQL.

Outras dicas

Se seus dados armazenados em um arquivo separado por vírgula, você poderá usar LOAD DATA INFILE consulta

Uma amostra desses dados pode ajudar.

Você pode tentar desta maneira para executar várias inserções em uma única consulta ...

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

mysql_query( $sql);
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top