2011-11-29 10 views
5

मैं एक .sql फ़ाइल का स्रोत कैसे करूं, जैसे नीचे एक, php के माध्यम से?PHP के माध्यम से एक MySQL फ़ाइल स्रोत?

CREATE DATABASE IF NOT EXISTS data_base; 
USE data_base; 
CREATE TABLE IF NOT EXISTS the_table( 
    package_name varchar(50) NOT NULL, 
    PRIMARY KEY (`package_name`) 
) 

मैंने निम्नलिखित की कोशिश की, लेकिन यह काम नहीं करता है। मैंने कुछ शोध करने की कोशिश की है और ऐसा लगता है कि मुझे लोड डेटा इन्फाइल नामक कुछ करने की ज़रूरत है, लेकिन मुझे समझ में नहीं आता है।

mysql_query("source C:/xampp/htdocs/Project1/mysql/source.sql;") or die(mysql_error()); 

मैं PHP का उपयोग कर एक .sql फ़ाइल कैसे स्रोत कर सकता हूं? धन्यवाद।

उत्तर

4

आप mysqli :: multi_query() के साथ भी एक SQL स्क्रिप्ट नहीं चला सकते हैं। एक SQL स्क्रिप्ट में कुछ आदेश शामिल हो सकते हैं जिन्हें केवल MySQL क्लाइंट द्वारा builtin commands के रूप में पहचाना जाता है, न कि MySQL सर्वर के SQL पार्सर द्वारा।

SOURCE निश्चित रूप से एक आदेश है कि mysql ग्राहक द्वारा preprocessed है है। सर्वर उस आदेश को समझ में नहीं आता है। इसलिए आप क्वेरी API का उपयोग कर सर्वर पर SOURCE निष्पादित नहीं कर सकते हैं।

आप mysql ग्राहक builtin आदेशों को बाहर करने के अपने एसक्यूएल स्क्रिप्ट की सामग्री को प्रतिबंधित कर सकते हैं, तो यह mysqli :: multi_query उपयोग करने के लिए काम कर सकते हैं()। लेकिन यह SQL स्क्रिप्ट में अनुमत आदेशों के पूर्ण सेट के लिए काम नहीं करेगा।

भी देखें Running MySQL *.sql files in PHP

डेटा लोड INFILE को मेरा उत्तर तालिकाएं बनाने के लिए SQL कथन निष्पादित नहीं करता है, यह सिर्फ एक मौजूदा तालिका में एक पाठ फ़ाइल के क्षेत्र लोड करता है।

2

आप PHP कार्यात्मक कॉल के साथ mysql कमांड लाइन विवरण मिश्रण कर रहे हैं। एक या दूसरे करो।

(यदि उपलब्ध हो) का उपयोग mysql CLI:

// executing mysql cli 
exec("mysql < test.sql"); 

या mysqli_multi_query() साथ एसक्यूएल चलाएँ:

// running the files contents in bulk 
$sql= file_get_contents('test.sql'); 
mysqli_multi_query($sql); 

नोट: यह एक संभावित सुरक्षा जोखिम है। आपको सलाह दी जाती है।

+0

उत्कृष्ट, धन्यवाद। हालांकि यह सुरक्षा जोखिम क्यों है? – user954912

+1

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

संबंधित मुद्दे