कई सुझाव:
-
बहिष्कृत ext/mysql का उपयोग न करें , जब आप ext/mysqli या PDO का उपयोग कर सकते हैं।
-
संपूर्ण csv फ़ाइल को PHP वेरिएबल में न पढ़ें। क्या होता है जब फ़ाइल 500MB की होती है?
-
csv डेटा को पार्स करने के लिए कस्टम PHP कोड न लिखें, जब आप बिल्टिन फ़ंक्शन का उपयोग कर सकते हैं fgetcsv() ।
-
जब आप तैयार बयान ।
-
किसी बाहरी फ़ाइल के डेटा को SQL कथनों में प्रक्षेपित न करें। यह SQL इंजेक्शन को जोखिम में डालता है कमजोरियां, ठीक वैसे ही जैसे जब आप अविश्वसनीय उपयोगकर्ता इनपुट को प्रक्षेपित करते हैं।
-
जब आप MySQL के डेटा इनफाइल लोड करें आज्ञा। यह पंक्ति दर पंक्ति डालने से 20 गुना तेज है।
यहाँ एक आसान उपाय है:
<?php
$databasehost = "localhost";
$databasename = "test";
$databasetable = "sample";
$databaseusername="test";
$databasepassword = "";
$fieldseparator = ",";
$lineseparator = "\n";
$csvfile = "filename.csv";
if(!file_exists($csvfile)) {
die("File not found. Make sure you specified the correct path.");
}
try {
$pdo = new PDO("mysql:host=$databasehost;dbname=$databasename",
$databaseusername, $databasepassword,
array(
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
)
);
} catch (PDOException $e) {
die("database connection failed: ".$e->getMessage());
}
$affectedRows = $pdo->exec("
LOAD DATA LOCAL INFILE ".$pdo->quote($csvfile)." INTO TABLE `$databasetable`
FIELDS TERMINATED BY ".$pdo->quote($fieldseparator)."
LINES TERMINATED BY ".$pdo->quote($lineseparator));
echo "Loaded a total of $affectedRows records from this csv file.\n";
?>
मैंने मैक पर PHP 5.3.26 के साथ इसका परीक्षण किया, लिनक्स पर MySQL 5.6.14 से कनेक्ट किया।