Mysql
 sql >> Baza danych >  >> RDS >> Mysql

PDO i wiązanie wielu zestawów wartości podczas wstawiania - ostatnio

Teoretycznie może to brzmieć tak, jakby pojedyncza instrukcja była bardziej wydajna, ponieważ unikasz wykonywania wielu wywołań do serwera MySQL, ale w rzeczywistości jest to mikrooptymalizacja i nadmiernie komplikujesz swój kod, nie osiągając prawie żadnych korzyści.

Fajną rzeczą w przygotowanych oświadczeniach jest to, że jest przygotowywana raz i może być wykonywana wiele razy. Dzięki temu nie musisz już wielokrotnie analizować instrukcji SQL. Po prostu przygotuj instrukcję poza pętlą, a następnie wykonaj ją wewnątrz pętli.

$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO table (firstName, lastName) VALUES(?,?)');
foreach ($names as $name) {
    $stmt->execute($name);
}

Jeśli zapakujesz całość w transakcję, jak sugerował Twój Zdrowy Rozsądek w komentarzach, nie ma zauważalnej różnicy w wydajności w porównaniu z jednym dużym stwierdzeniem.

$names = [['Joe', 'Smith'], ['Fred', 'Sampson'], ['Lisa', 'Pearce']];
$stmt = $pdo->prepare('INSERT INTO people (firstName, lastName) VALUES(?,?)');
$pdo->beginTransaction();
foreach ($names as $name) {
    $stmt->execute($name);
}
$pdo->commit();


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zapytanie przestawne MySQL

  2. Wiosna, hibernacja, leniwe ładowanie Blob

  3. Zapobiegaj duplikowaniu rekordów w tabeli za pomocą PHP

  4. Haszowanie hasła za pomocą krypty nie działa podczas logowania, wyświetla nieprawidłowe hasło

  5. Problemy z aktywnymi rekordami CodeIgnitera przy wywoływaniu wielu procedur składowanych