Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

पीडीओ तैयार बयानों के साथ कई पंक्तियों को सम्मिलित करें

कहने वाली पहली महत्वपूर्ण बात यह है कि आप कर सकते हैं केवल एक के लिए धन्यवाद अनेक पंक्तियाँ सम्मिलित करें 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);
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. मैं यह देखने के लिए कैसे जांच करूं कि कोई मान MySQL में एक पूर्णांक है या नहीं?

  2. SQLite और कस्टम ऑर्डर द्वारा

  3. MySQL में डेटाटाइम वैल्यू में समय कैसे जोड़ें

  4. डेटा मौजूद न होने पर भी मैसकल महीने-वार रिकॉर्ड का चयन करेगा

  5. MySQL फायर ट्रिगर इन्सर्ट और अपडेट दोनों के लिए