आपको दोनों को कॉन्फ़िगर करने की आवश्यकता है क्लाइंट और सर्वर इस कमांड को अनुमति देने के लिए:
-
सुनिश्चित करें कि सर्वर LOAD DATA LOCAL INFILE की अनुमति देता है। MySQL सर्वर पर /etc/my.cnf संपादित करें:
[server] local-infile=1
-
अपनी PHP स्क्रिप्ट में PDO विशेषता सेट करें:
<?php $dsn = "mysql:host=localhost;dbname=test"; $user = "root"; $password = "root"; $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_LOCAL_INFILE=>1)); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->exec("LOAD DATA LOCAL INFILE 'foo.csv' INTO TABLE foo FIELDS TERMINATED BY ','");
इसे कंस्ट्रक्टर के लिए ड्राइवर विकल्प तर्क में सेट करने की आवश्यकता है, न कि बाद के कॉल में
setAttribute()
.मैंने अभी उपरोक्त कोड उदाहरण का परीक्षण सफलतापूर्वक PHP 5.5.8 और Percona Server 5.6.15 CentOS Linux 6.5 पर किया है।
यदि आपको अभी भी परेशानी है, तो आपके पास MySQL क्लाइंट या PDO का निर्माण हो सकता है जो स्थानीय-इनफाइल की अनुमति नहीं देता है। आवश्यकताओं का वर्णन http://dev में किया गया है। mysql.com/doc/refman/5.6/hi/load-data-local.html
mysql.allow_local_infile
आपके php.ini में विकल्प पीडीओ के लिए प्रासंगिक नहीं है।