कहने वाली पहली महत्वपूर्ण बात यह है कि आप कर सकते हैं केवल एक के लिए धन्यवाद अनेक पंक्तियाँ सम्मिलित करें INSERT
क्वेरी
INSERT INTO Table (col1, col2, col3)
VALUES ('abc', 'def', 'ghi'),
('abc', 'def', 'ghi'),
('abc', 'def', 'ghi'),
('abc', 'def', 'ghi'),
('abc', 'def', 'ghi')
-- and so on...
एक बार जब आप यह जान लेते हैं, तो आप पीडीओ (उदाहरण के लिए) के साथ एक अच्छा समाधान प्राप्त करने में सक्षम होते हैं।
आपको यह ध्यान रखना होगा कि आप एक पूर्ण prepare
चाहते हैं। और execute
प्रक्रिया (सुरक्षा की दृष्टि से, आपको प्रत्येक पैरामीटर को अलग से पास करना होगा)।
मान लें कि आपके पास निम्नलिखित के रूप में संरचित सम्मिलित करने के लिए पंक्तियाँ हैं:
$rows = array(
array('abc', 'def', 'ghi'), // row 1 to insert
array('abc', 'def', 'ghi'), // row 2 to insert
array('abc', 'def', 'ghi') // row 3 to insert
// and so on ...
);
आपका लक्ष्य इस परिणाम को तैयार क्वेरी . के रूप में प्राप्त करना है :
INSERT INTO Table (col1, col2, col3)
VALUES (?, ?, ?),
(?, ?, ?),
(?, ?, ?)
इसके संगत निष्पादित . के साथ :
PDOStatement::execute(array('abc', 'def', 'ghi', 'abc', 'def', 'ghi', 'abc', 'def', 'ghi'));
खैर, आप केवल अभी करना होगा:
$rows = array(
array('abc', 'def', 'ghi'),
array('abc', 'def', 'ghi'),
array('abc', 'def', 'ghi')
);
$row_length = count($rows[0]);
$nb_rows = count($rows);
$length = $nb_rows * $row_length;
/* Fill in chunks with '?' and separate them by group of $row_length */
$args = implode(',', array_map(
function($el) { return '('.implode(',', $el).')'; },
array_chunk(array_fill(0, $length, '?'), $row_length)
));
$params = array();
foreach($rows as $row)
{
foreach($row as $value)
{
$params[] = $value;
}
}
$query = "INSERT INTO Table (col1, col2, col3) VALUES ".$args;
$stmt = DB::getInstance()->prepare($query);
$stmt->execute($params);
और... बस!
इस तरह, प्रत्येक परम को अलग से व्यवहार किया जाता है, जो आप चाहते हैं (सुरक्षा, सुरक्षा, सुरक्षा!) और यह सब, गतिशील तरीके से, केवल एक INSERT
के साथ क्वेरी
यदि आपके पास सम्मिलित करने के लिए बहुत अधिक पंक्तियाँ हैं (देखें यह
), आपको execute
. करना चाहिए एक के बाद एक
$rows = array(
array('abc', 'def', 'ghi'), // row 1 to insert
array('abc', 'def', 'ghi'), // row 2 to insert
array('abc', 'def', 'ghi') // row 3 to insert
// and so on ...
);
$args = array_fill(0, count($rows[0]), '?');
$query = "INSERT INTO Table (col1, col2, col3) VALUES (".implode(',', $args).")";
$stmt = $pdo->prepare($query);
foreach ($rows as $row)
{
$stmt->execute($row);
}