INTO TABLE '$this->table'
तालिका नाम उद्धृत करने के लिए एकल-उद्धरणों का उपयोग न करें। एकल-उद्धरण स्ट्रिंग शाब्दिक
के लिए हैं या तारीख अक्षर
.
या तो बिना उद्धरण के उपयोग करें, या फिर बैक-टिक सीमांकित पहचानकर्ताओं के लिए
।
INTO TABLE `$this->table`
अपनी टिप्पणी दें:
आपने स्पष्ट रूप से दोनों . से उद्धरण हटा दिए हैं फ़ाइल नाम और टैबलेटनाम। मेरा मतलब यह नहीं था। टैबलेनाम से बस स्ट्रिंग-उद्धरण हटा दें। फ़ाइल नाम के लिए आपको उनकी आवश्यकता है।
उदाहरण:
$sql = "LOAD DATA LOCAL INFILE '$this->file'
INTO TABLE `$this->table`
FIELDS TERMINATED BY ','
LINES TERMINATED BY '\\n'
OPTIONALLY ENCLOSED BY '\"'
($columns)";
http://dev.mysql पर प्रलेखित सिंटैक्स की समीक्षा करें। com/doc/refman/5.6/hi/load-data.html
INFILE 'file_name'
. के आसपास उद्धरणों की उपस्थिति या अनुपस्थिति पर ध्यान दें और INTO TABLE tbl_name
:
LOAD DATA [LOW_PRIORITY | CONCURRENT] [LOCAL] INFILE 'file_name'
[REPLACE | IGNORE]
INTO TABLE tbl_name
जब तक आपके टेबल नाम में विशेष वर्ण, रिक्त स्थान या आरक्षित शब्द न हों, तब तक आपको वास्तव में तालिका नाम के आसपास बैक-टिक की आवश्यकता नहीं है।
आपको यह त्रुटि मिली:
ठीक है, सभी SQL कमांड prepare()
. के साथ संगत नहीं हैं . मैंने आपके मामले की जाँच नहीं की, क्योंकि हम पहले सिंटैक्स त्रुटि का समाधान कर रहे थे। आप कमांड की एक सूची पा सकते हैं जो prepare()
. हो सकती हैं d शीर्षक के अंतर्गत तैयार विवरणों में अनुमत SQL सिंटैक्स इस पेज पर:http://dev .mysql.com/doc/refman/5.6/hi/sql-syntax-prepared-statements.html
मैंने MySQL 5.6 डॉक्स से लिंक किया है, लेकिन आपको अपने द्वारा उपयोग किए जाने वाले MySQL के संस्करण के लिए डॉक्स पर जाना चाहिए। क्योंकि संगत कमांड की सूची रिलीज से रिलीज में बदल जाती है।
इसलिए आप prepare()
का उपयोग नहीं कर सकते हैं -- आपको exec()
. का उपयोग करना होगा या query()
इसके बजाय LOAD DATA INFILE
. के लिए आज्ञा।
वैकल्पिक रूप से, यदि आप PDO का उपयोग कर रहे हैं, तो आप PDO::ATTR_EMULATE_PREPARES
विशेषता सेट कर सकते हैं करने के लिए true
. यह PDO को MySQL से नकली बना देगा, इसलिए तैयार () एक नो-ऑप है और क्वेरी वास्तव में निष्पादित () के दौरान भेजी जाती है।