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

Jaki jest najlepszy sposób na wstawienie wielu wierszy w PHP PDO MYSQL?

Masz co najmniej te dwie opcje:

$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];

$sql = "insert into `table_name` (col1, col2, col3) values (?,?,?)";

$stmt = $db->prepare($sql);

foreach($rows as $row)
{
    $stmt->execute($row);
}

OR:

$rows = [(1,2,3), (4,5,6), (7,8,9) ... ];

$sql = "insert into `table_name` (col1, col2, col3) values ";

$paramArray = array();

$sqlArray = array();

foreach($rows as $row)
{
    $sqlArray[] = '(' . implode(',', array_fill(0, count($row), '?')) . ')';

    foreach($row as $element)
    {
        $paramArray[] = $element;
    }
}

// $sqlArray will look like: ["(?,?,?)", "(?,?,?)", ... ]

// Your $paramArray will basically be a flattened version of $rows.

$sql .= implode(',', $sqlArray);

$stmt = $db->prepare($sql);

$stmt->execute($paramArray);

Jak widać, pierwsza wersja zawiera dużo prostszy kod; jednak druga wersja wykonuje wstawianie wsadowe. Wstawianie partii powinno być szybsze, ale zgadzam się z @BillKarwin że różnica w wydajności nie zostanie zauważona w większości wdrożeń.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. importowanie CSV do phpmyadmina

  2. Szyny wybierają losowy rekord

  3. Czy przechowywanie plików graficznych w bazie danych Mongo to dobry pomysł?

  4. Kopia zapasowa użytkowników MySQL

  5. MySQL:wybierz losowy wpis, ale waż w stosunku do niektórych wpisów