2009-08-20 19 views
19

क्या यह कानूनी है?एकाधिक mysql INSERT कथन एक प्रश्न php

$string1= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
$string1 .= "INSERT INTO....;"; 
mysql_query($string1) or die(mysql_error()); 
+0

मैं मेरी समस्या मेरी php इस mysqli विधि का उपयोग कर परियोजना [mysqli पर कई क्वेरी चलाने हल .multi-query।] (http://us2.php.net/manual/en/mysqli.multi-query.php) –

उत्तर

0

नहीं। वे अलग प्रश्न हैं, और उन्हें इस तरह कहा जाना चाहिए।

33

नहीं, mysql_query() केवल एक समय में एक प्रश्न की अनुमति देता है।

आप इस तरह कई पंक्तियों सम्मिलित कर सकते हैं:, क्या इसके लायक है, और यदि आप एक ही टेबल में एक ही डाटा डालने कर रहे हैं पर निर्भर करता है के लिए

INSERT INTO table (col1, col2) 
VALUES (1, 2), (3, 4), (5, 6) 
+0

यह एक बेहतर है - फ़ील्ड नाम निर्दिष्ट करना महत्वपूर्ण है कि आप डेटा को डंप कर रहे हैं ! – itsricky

2

सामान्य तौर पर, जो मान्य एसक्यूएल के बाद से प्रत्येक कथन आदेश एसक्यूएल इंजेक्शन हमलों है कि एक का फायदा उठाने सकता है के खिलाफ की रक्षा के लिए एक अर्धविराम के साथ समाप्त होता है, लेकिन पीएचपी आप एक समय में एक से अधिक क्वेरी भेजने के लिए अनुमति नहीं है, है खराब लिखित लिपि।

आप अभी भी एक वाक्य रचना की तरह उपयोग कर सकते हैं:

INSERT INTO foo VALUES ('a1', 'b1'), ('a2', 'b2'); 
10

MySQL देव समर्थन से MySQL dev forum

INSERT INTO table (artist, album, track, length) 
VALUES 
("$artist", "$album", "$track1", "$length1"), 
("$artist", "$album", "$track2", "$length2"), 
("$artist", "$album", "$track3", "$length3"), 
("$artist", "$album", "$track4", "$length4"), 
("$artist", "$album", "$track5", "$length5"); 

तो सम्मिलित सामान्य हमेशा की तरह के रूप में चला जाता है: पहला तालिका नाम नामकरण

  • जहां हम नई पंक्ति डालना चाहते हैं,
  • फ़ोल दौर कोष्ठक में स्तंभ नाम नामकरण से इजाजत (नोट: जरूरत नहीं हैं कि आपके सभी स्तंभ सम्मिलित करना चाहते हैं),
  • मान कुंजी नाम और द्वारा पीछा किया तो दौर कोष्ठक में मूल्यों है कि आप नई पंक्ति के लिए सम्मिलित करना चाहते हैं आता है उपरोक्त तालिका में,
  • COMMA द्वारा पीछा किया और फिर ऊपर
  • उल्लेख तालिका में नई पंक्ति के लिए नए मूल्यों के साथ दौर कोष्ठक की एक और जोड़ी है और इस दोहराता एन बार के रूप में लंबे समय तक आप सम्मिलित करना डेटा है।

एक सम्मिलित कथन के साथ कई मानों को खुश करना। :)

2

कॉपी/एक समारोह और एक पाश के भीतर पेस्ट उदाहरण ($ आईडी है एक सरणी लगता है)

public function duplicateItem($ids) 
{ 
    if (isset($ids[0])){ //at least one item 

     $sqlQuery = "INSERT INTO items (item_id, content) VALUES "; 

     for($i=0; $i<count($ids); $i++) { 

       if ($i == count($ids)-1){ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."');"; 
       }else{ 
        $sqlQuery .= "(".$ids[$i][0].", '".$ids[$i][1]."'),"; 
       } 

     } 

     mysql_query($sqlQuery) or die('Error, insert query failed: '.mysql_error()); 

    } 
} 
+0

concatenation से बचने के लिए बेहतर है। 'Implode()' का प्रयोग करें। विवरण के लिए यह [उत्तर] (http://stackoverflow.com/a/780046/4040525) देखें। –

+1

इस मामले में इम्प्लोड() का उपयोग क्यों फायदेमंद है? ऊपर दिए गए प्रश्न में हमारे पास सामान्य एसक्यूएल स्टेटमेंट हैं। जवाब में आप इंगित करते हैं कि वे बड़ी मात्रा में टेक्स्ट (जैसे बड़े ग्रंथों के 1000 आवेषण) के बारे में बात करते हैं और, हां, उस मामले में concatenation से बचने के लिए अच्छा है। –

+0

मुझे पता है।यहाँ concatenation का उपयोग करने के लिए ठीक है। कल मैंने दोनों उत्तरों को देखा और सोचा कि अंगूठे के नियम के रूप में 'implode() 'का उपयोग करना बेहतर है। –

-1
INSERT INTO table (a,b) VALUES (1,2), (2,3), (3,4); 
संबंधित मुद्दे