Sayın Balagtas, biraz daha net ... gibi aynı cevap
Yeni sürümler MySQL ve PHP PDO do çoklu-satır INSERT
ifadeleri destekler.
SQL Overview
SQL size INSERT
İstediklerim 3 sütunlu bir tablo varsayarak, bu gibi bir şey olacaktır.
INSERT INTO tbl_name
(colA, colB, colC)
VALUES (?, ?, ?), (?, ?, ?), (?, ?, ?) [,...]
ON DUPLICATE KEY UPDATE
, hatta bir çok satır INSERT ile beklendiği gibi çalışır; Bu ekler:
ON DUPLICATE KEY UPDATE colA = VALUES(colA), colB = VALUES(colB), colC = VALUES(colC)
PHP Overview
PHP kodu olağan $pdo->prepare($qry)
ve $stmt->execute($params)
PDO aramaları takip edecek.
$params
INSERT
geçmek için all değerleri 1-boyutlu bir dizi olacak.
Yukarıdaki örnekte, 9 elemanlar içermelidir; PDO değerlerin tek bir satır olarak 3 her kümesini kullanır. (3 sütun, her = 9 eleman dizisi 3. satır eklemek.)
Implementation
Aşağıda kod açıklık, etkinlik değil için yazılmıştır. PHP Eğer isterseniz sizin veri üzerinden harita veya yürümek için daha iyi yollar array_*()
fonksiyonları ile çalışır. Tabii ki işlemleri kullanabilirsiniz olmadığını MySQL tablo türüne bağlıdır.
Varsayarsak:
$tblName
- tablonun dize ismi INSERT
$colNames
- 1-dimensional array of the column names of the table
These column names must be valid MySQL column identifiers; escape them with backticks (``) if they are not
$dataVals
- Her öğe eklemek için değerlerin bir satır 1-d dizi çok-boyutlu bir dizi,
Sample Code
// setup data values for PDO
// memory warning: this is creating a copy all of $dataVals
$dataToInsert = array();
foreach ($dataVals as $row => $data)
foreach($data as $val)
$dataToInsert[] = $val;
// (optional) setup the ON DUPLICATE column names
$updateCols = array();
foreach ($colNames as $curCol)
$updateCols[] = $curCol . " = VALUES($curCol)";
$onDup = implode(', ', $updateCols);
// setup the placeholders - a fancy way to make the long "(?, ?, ?)..." string
$rowPlaces = '(' . implode(', ', array_fill(0, count($colNames), '?')) . ')';
$allPlaces = implode(', ', array_fill(0, count($dataVals), $rowPlaces));
$qry = "INSERT INTO $tblName
(" . implode(', ', $colNames) . "
VALUES " . $allPlaces . "
ON DUPLICATE KEY UPDATE $onDup";
// and then the PHP PDO boilerplate
$stmt = $pdo->prepare ($sql);
try {
$stmt->execute($insert_values);
} catch (PDOException $e){
echo $e->getMessage();
}
$pdo->commit();