logo

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - नया लेआउट बिल्डर अनुभव❗

एक्स्ट्रा ब्लॉक टाइप्स (EBT) - स्टाइलिश, कस्टमाइज़ेबल ब्लॉक टाइप्स: स्लाइडशो, टैब्स, कार्ड्स, एकॉर्डियन्स और कई अन्य। बैकग्राउंड, DOM बॉक्स, जावास्क्रिप्ट प्लगइन्स के लिए बिल्ट-इन सेटिंग्स। आज ही लेआउट बिल्डिंग का भविष्य अनुभव करें।

डेमो EBT मॉड्यूल्स EBT मॉड्यूल्स डाउनलोड करें

❗एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - नया पैराग्राफ्स अनुभव

एक्स्ट्रा पैराग्राफ टाइप्स (EPT) - एनालॉजिकल पैराग्राफ आधारित मॉड्यूल्स का सेट।

डेमो EPT मॉड्यूल्स EPT मॉड्यूल्स डाउनलोड करें

स्क्रॉल

Drupal 7 में डेटाबेस के साथ काम — पाठ 8 — डेटा जोड़ने की क्वेरीज़ (INSERT INTO)

14/10/2025, by Ivan

डेटा जोड़ने (INSERT) की क्वेरीज़ हमेशा Drupal के क्वेरी बिल्डर (Query Builder) के माध्यम से बनाई जानी चाहिए। कुछ डेटाबेस सिस्टम्स में बड़े ऑब्जेक्ट्स (LOB — Large OBject, जैसे MySQL में TEXT) और बाइनरी बड़े ऑब्जेक्ट्स (BLOB — Binary Large OBject) के लिए विशेष हैंडलर की आवश्यकता होती है, इसलिए डेटाबेस ड्राइवर स्तर पर इन हैंडलरों को संभालने के लिए एक अमूर्त परत (abstraction layer) आवश्यक होती है।

INSERT क्वेरीज़ db_insert() फ़ंक्शन से शुरू होती हैं:

<?php
$query = db_insert('node', $options);
?>

यह क्वेरी ऑब्जेक्ट “node” टेबल में एक या अधिक रिकॉर्ड्स जोड़ता है। ध्यान दें कि टेबल के नाम के चारों ओर आकृति कोष्ठक ({}) लगाने की आवश्यकता नहीं है — क्वेरी बिल्डर यह स्वतः करता है।

INSERT क्वेरी Fluent API शैली का उपयोग करती है, जिसका अर्थ है कि सभी मेथड्स (सिवाय execute() के) वही ऑब्जेक्ट वापस लौटाते हैं, जिससे आप मेथड्स को एक साथ जोड़ सकते हैं (method chaining)।

INSERT क्वेरीज़ के कई अलग-अलग पैटर्न होते हैं — अलग-अलग उपयोग के लिए। नीचे सबसे आम उपयोग की जाने वाली विधियाँ दी गई हैं।

संक्षिप्त रूप (Compact form)

अधिकांश परिस्थितियों में उपयोग की जाने वाली अनुशंसित (preferred) विधि:

<?php
$nid = db_insert('node')
  ->fields(array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ))
  ->execute();
?>

यह क्वेरी निम्न SQL क्वेरी के समान है:

INSERT INTO {node} (title, uid, created) VALUES ('Example', 1, 1221717405);

ऊपर दिया गया कोड फ़ील्ड नामों और उनके संबंधित मानों को एक साथ जोड़ता है।

fields() मेथड एक एसोसिएटिव ऐरे स्वीकार करता है, जहाँ कुंजी (key) टेबल के कॉलम का नाम होता है और मान (value) वह डेटा होता है जो जोड़ा जाएगा।

execute() मेथड अन्य क्वेरी प्रकारों से भिन्न होता है — यह उस फ़ील्ड का मान लौटाता है जो auto-increment के रूप में सेट है। उदाहरण के लिए, “node” टेबल में यह मान nid होगा। यदि टेबल में कोई auto-increment फ़ील्ड नहीं है, तो execute() “undefined” लौटाएगा और उस पर भरोसा नहीं किया जाना चाहिए।

सरलीकृत रूप (Degenerate form)

<?php
$nid = db_insert('node')
  ->fields(array('title', 'uid', 'created'))
  ->values(array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ))
  ->execute();
?>

यह कोड पहले वाले उदाहरण के समान परिणाम देगा।

जब fields() को एसोसिएटिव ऐरे के बजाय इंडेक्स ऐरे के साथ कॉल किया जाता है, तो यह केवल कॉलम्स को परिभाषित करता है, लेकिन उनके मान नहीं। यह तरीका मुख्य रूप से multi-insert (बहु-पंक्ति जोड़) क्वेरी के लिए उपयोग होता है।

values() मेथड एक एसोसिएटिव या इंडेक्स ऐरे स्वीकार करता है जिसमें डाले जाने वाले मान शामिल होते हैं। यदि आप इंडेक्स ऐरे का उपयोग करते हैं, तो मानों का क्रम fields() में परिभाषित फ़ील्ड्स के क्रम से मेल खाना चाहिए। यदि आप एसोसिएटिव ऐरे का उपयोग करते हैं, तो क्रम मायने नहीं रखता।

हालांकि इंडेक्स ऐरे कम उपयोग में लाए जाते हैं, क्योंकि compact form अधिक पठनीय और व्यावहारिक होती है।

एकाधिक पंक्तियाँ जोड़ना (Multi-insert form)

INSERT क्वेरी एक साथ कई पंक्तियाँ जोड़ने का समर्थन करती है। इसके लिए आप values() मेथड को कई बार कॉल कर सकते हैं। इस प्रकार की क्वेरीज़ अधिकांश डेटाबेस में एक ही लेनदेन (transaction) में निष्पादित होती हैं, जिससे प्रदर्शन में सुधार होता है।

<?php
$values = array(
  array(
    'title' => 'Example',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 2',
    'uid' => 1,
    'created' => REQUEST_TIME,
  ),
  array(
    'title' => 'Example 3',
    'uid' => 2,
    'created' => REQUEST_TIME,
  ),
);

$query = db_insert('node')->fields(array('title', 'uid', 'created'));

foreach ($values as $record) {
  $query->values($record);
}

$query->execute();
?>

यह उदाहरण दिखाता है कि कैसे एक ही क्वेरी ऑब्जेक्ट का उपयोग करके कई रिकॉर्ड्स को एक साथ डाला जा सकता है।

ऊपर दिए गए कोड के समतुल्य SQL क्वेरीज़ इस प्रकार होंगी:

INSERT INTO {node} (title, uid, created) VALUES ('Example', 1, 1221717405);
INSERT INTO {node} (title, uid, created) VALUES ('Example2', 1, 1221717405);
INSERT INTO {node} (title, uid, created) VALUES ('Example3', 2, 1221717405);

ध्यान दें कि मल्टी-इन्सर्ट क्वेरीज़ में execute() का रिटर्न मान “undefined” होता है और इसे किसी विशिष्ट मान के रूप में उपयोग नहीं किया जाना चाहिए, क्योंकि यह विभिन्न डेटाबेस ड्राइवरों में भिन्न हो सकता है।

SELECT क्वेरी के परिणामों के आधार पर INSERT (सारांश तालिका)

यदि आप किसी टेबल को किसी अन्य SELECT क्वेरी के परिणामों से भरना चाहते हैं, तो आप PHP के माध्यम से डेटा प्रोसेस कर सकते हैं या सीधे SQL में INSERT INTO ... SELECT FROM सिंटैक्स का उपयोग कर सकते हैं।

उदाहरण के लिए, हमें एक “mytable” नाम की टेबल बनानी है जिसमें सभी नोड्स (nid) और उनके संबंधित उपयोगकर्ता नाम (username) संग्रहीत हों।

Drupal 6

<?php
db_query('INSERT INTO {mytable} (nid, name) SELECT n.nid, u.name FROM {node} n LEFT JOIN {users} u ON n.uid = u.uid WHERE n.type = "%s"', array('page'));
?>

Drupal 7

<?php
// SELECT क्वेरी बनाते हैं।
$query = db_select('node', 'n');
// users टेबल को जोड़ते हैं।
$query->join('users', 'u', 'n.uid = u.uid');
// आवश्यक फ़ील्ड्स जोड़ते हैं।
$query->addField('n', 'nid');
$query->addField('u', 'name');
// केवल “page” प्रकार की नोड्स के लिए शर्त लगाते हैं।
$query->condition('type', 'page');

// परिणामों को mytable में जोड़ते हैं।
db_insert('mytable')
  ->from($query)
  ->execute();
?>

डिफ़ॉल्ट मानों का उपयोग (Default values)

यदि किसी कॉलम के लिए मान नहीं दिया गया है और वह कॉलम डिफ़ॉल्ट मान के साथ परिभाषित है, तो डेटाबेस स्वचालित रूप से वह डिफ़ॉल्ट मान उपयोग करेगा।

हालाँकि, कभी-कभी आपको स्पष्ट रूप से यह निर्दिष्ट करना होता है कि डेटाबेस को डिफ़ॉल्ट मानों का उपयोग करना चाहिए। यह विशेष रूप से तब उपयोगी है जब आप सभी कॉलम्स के लिए डिफ़ॉल्ट मान चाहते हैं। इसके लिए useDefaults() मेथड का उपयोग किया जाता है:

<?php
$query->useDefaults(array('field1', 'field2'));
?>

यह कोड डेटाबेस को बताता है कि field1 और field2 के लिए डिफ़ॉल्ट मानों का उपयोग किया जाए। ध्यान दें कि यदि वही फ़ील्ड useDefaults() और fields() या values() दोनों में निर्दिष्ट है, तो यह त्रुटि उत्पन्न करेगा।