2015-09-07 6 views
5

mysql (वर्तमान संस्करण: सर्वर संस्करण: 5.5.44-0 + deb8u1 (डेबियन) के अपग्रेड के बाद अपलोड (स्थानीय) फ़ाइल से डेटा लोड नहीं कर सकता है, फाइलें निहित हैं:mysql_connect --local-infile पैरामीटर

dbconnection.php

<?php 
$server = "localhost"; 
$user = "TheUser"; 
$pass = "ThePass"; 
$db_name = "DbName"; 
$link = mysql_connect($server, $user, $pass); 
mysql_select_db($db_name); 
mysql_set_charset('utf8', $link); 
?> 

send2db.php

<?php 
include 'dbconnection.php'; 
mysql_select_db("DbName") or die(mysql_error()); 
$query = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' "; 
mysql_query($query) or die(mysql_error()); 
?> 

त्रुटि का कहना है:

ERROR 1148 (42000): The used command is not allowed with this MySQL version 

mysql के अंदर:

SHOW GLOBAL VARIABLES LIKE 'local_infile'; 
+---------------+-------+ 
| Variable_name | Value | 
+---------------+-------+ 
| local_infile | ON | 
+---------------+-------+ 
1 row in set (0.00 sec) 

लेकिन अगर मैं इस तरह से पहुँचने के, फ़ाइलें लोड किया जा सकता है:

mysql --local-infile -p 

तो मेरे सवाल है, कर सकते हैं मैं dbconnection.php फाइल में यह विकल्प सेट, मैंने पहले से ही सफलता के बिना कई तरीकों की कोशिश की है, मैं my.cnf कॉन्फ़िगरेशन और कुछ अन्य सामानों के बारे में पोस्ट पढ़ रहा हूं लेकिन मेरे लिए कुछ भी काम नहीं करता है, कोई सुझाव?

धन्यवाद

अद्यतन: मैं दूर पूरे वेब mysqli के कोड बदल रहे हैं, Ufff !!, अच्छी तरह से सुझावों का पालन से जवाब bellow मैं अगले कोड है, लेकिन कोई सफलता नहीं किया, मुझे अभी भी संदेश मिलता है: "इस MySQL संस्करण के साथ प्रयुक्त कमांड की अनुमति नहीं है"। गर्भित फ़ाइलों अगले हैं:

acessdb.php

<?php 
$link = new mysqli($server, $user, $pass, $dbname); 
?> 

<?php include 'acessdb.php'; 
$link->options(MYSQLI_OPT_LOCAL_INFILE, true); 
mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link)); 
$link->options(MYSQLI_OPT_LOCAL_INFILE, false); 
?> 

कोई सुझाव send2db.php?

+0

फ़ाइल पथ कैसा दिखता है? क्या आप '/' या '\' का उपयोग कर रहे हैं? यह वास्तव में एक फर्क पड़ता है। –

+0

'अपफाइल/$ फ़ाइल', लेकिन जैसा कि मैंने अपडेट के साथ उल्लेख किया है, यह काम करने के लिए बंद कर दिया गया है, i। ई।, यह mysql –

+0

के पिछले संस्करणों के साथ काम कर रहा था ऐसा लगता है कि जैसे ही अद्यतन ने आपके mysql कॉन्फ़िगरेशन में सर्वर/क्लाइंट सेटिंग्स को स्थानीय-infile की अनुमति नहीं दी है। मैंने बस उस अंतिम पंक्ति को पढ़ा जहां आपने कहा था कि यह टर्मिनल में काम करता है। मैं नीचे एक उत्तर प्रदान करने जा रहा हूं, कृपया इसे सही उत्तर के रूप में चिह्नित करें। –

उत्तर

0

ठीक है, अंत में मैं रास्ता मिल गया है, यहाँ काम कर कोड है आशा करता हूँ की ये काम करेगा।

-1

चूंकि mysql_connect() PHP 5.5.0 (और भविष्य में हटा दिया जाएगा) के बाद से हटा दिया गया है, यह असंभव नहीं है कि समस्या आपके वेब सर्वर (अपाचे?) से आती है, न कि आपके SQL संस्करण।

एक और चीज जो इस समस्या का कारण बन सकती है वह आपकी फाइल की सामग्री है जिसमें अंत में बहिष्कृत कमांड होता है (यही त्रुटि संदेश आपको बताता है)।

+0

मैंने इसी तरह के परिणामों के साथ msqli() की कोशिश की, और फ़ाइल सामग्री सिर्फ पाठ है, कोई आदेश नहीं है। –

3

(या आपके सिस्टम पर mysql विन्यास फाइल) my.cnf में विकल्प सेट करें:

local-infile=1 

पुनः प्रारंभ MySQL सेवा और यह आपके लिए समस्या को ठीक करना चाहिए।

अद्यतन एक अन्य विकल्प पीएचपी

के साथ प्रयास करें
$conn = mysqli_init(); 
$conn->options(MYSQLI_OPT_LOCAL_INFILE, true); 

कि प्रयास करें और देखें कि अगर काम करता है। विकल्प लिंक mysqli options

+0

मैंने पहले ही यह कोशिश की है: [mysqld] local-infile = 1/[mysql] local-infile = 1 या [mysqld] local-infile = on/[mysql] local-infile = चालू और हमेशा परिणाम है: प्रयुक्त कमांड इस MySQL संस्करण –

+0

के साथ अनुमति देने की अनुमति नहीं है, मुझे किसी अन्य विकल्प के साथ उत्तर संपादित करने दें, शायद यह PHP है ... –

+0

और हमेशा मैं इन आदेशों को mysql को पुनरारंभ करने पर जोड़ता हूं, मुझे ये पंक्तियां मिलती हैं: ERROR 2002 (HY000): कनेक्ट नहीं हो सकता सॉकेट के माध्यम से स्थानीय MySQL सर्वर '/var/run/mysqld/mysqld.sock' (2) –

0

LOCAL INFILE एक तंत्र है जिसके द्वारा डेटाबेस सर्वर डेटाबेस क्लाइंट (= PHP सर्वर) से किसी भी फ़ाइल को कम या कम अनुरोध कर सकता है यदि आप अपने सर्वर और नेटवर्क पर पूरी तरह भरोसा नहीं कर सकते हैं तो यह खतरनाक हो सकता है।इसलिए LOCAL INFILE को डेटाबेस क्लाइंट के रूप में सर्वर (जैसे आपने किया) दोनों को अनुमति दी जानी चाहिए।

आप पुराने पुराने और बनाए गए mysql PHP का विस्तार नहीं कर रहे हैं। वह एक्सटेंशन ध्वज को सेट करने का समर्थन नहीं करता है। आपको mysqli पर स्विच करना चाहिए जिसमें इस मोड को सक्षम करने के लिए MYSQLI_OPT_LOCAL_INFILE विकल्प है।

फ़ाइल: connectdb.php

$link = mysqli_init(); 
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true); 
mysqli_real_connect($link, $server, $user, $pass, $dbname); 

फ़ाइल: send2db.php

mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link)); 

मैं

<?php 
$m = new mysqli(...); 
$m->option(MYSQLI_OPT_LOCAL_INFILE, true); 
$m->query("LOAD DATA LOCAL INFILE ...."); 
$m->option(MYSQLI_OPT_LOCAL_INFILE, false); 
?> 
संबंधित मुद्दे