जब भी मुझे डेटाबेस तालिका में एक सीएसवी आयात करना पड़ा, मैंने हमेशा अपना स्वयं का सीएसवी पार्सर/आयातक लिखा है। यह काफी आसान है।
यहाँ एक उदाहरण है।
test.csv
Firstname,Lastname,Age
"Latheesan","Kanes",26
"Adam","Smith",30
test.php
<?php
// Mini Config
$csv_file = 'test.csv';
$delimiter = ',';
$enclosure = '"';
$skip_first_row = true;
$import_chunk = 250;
// Parse CSV & Build Import Query
$import_queries = array();
$first_row_skipped = false;
if (($handle = fopen($csv_file, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, $delimiter, )) !== FALSE) {
if ($skip_first_row && !$first_row_skipped) {
$first_row_skipped = true;
continue;
}
list($firstname, $lastname, $age) = $data;
$import_queries[] = "INSERT INTO myTable (firstname, lastname, age) VALUES ('$firstname', '$lastname', $age);";
}
fclose($handle);
}
// Proceed if any data got parsed
if (sizeof($import_queries))
{
foreach(array_chunk($import_queries, $import_chunk) as $queries)
{
$dbh->query(implode(' ', $queries));
}
}
?>
पार्स की गई क्वेरी इस तरह दिखाई देंगी (यदि आप print_r
यह):
Array
(
[0] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Latheesan', 'Kanes', 26);
[1] => INSERT INTO myTable (firstname, lastname, age) VALUES ('Adam', 'Smith', 30);
)
डीबी में वास्तविक आयात के लिए आपके पास दो विकल्प हैं:
-
आयात एसक्यूएल क्वेरी का संग्रह बनाएं और इसे बैच (array_chunk) में निष्पादित करें - इसका मतलब आपके डीबी के खिलाफ कम प्रश्न हैं। हालाँकि जैसा कि आप देख सकते हैं, मैं CSV से मूल्यों की जाँच नहीं कर रहा हूँ - यानी मुझे अपने डेटा स्रोत पर भरोसा है और कुछ भी नहीं बच रहा है - थोड़ा खतरनाक...
-
आप क्वेरी को निष्पादित करते हैं, जैसे ही आपने इसे मानों से बचने के साथ बनाया है - छोटी कमी यह है कि यह csv में प्रति पंक्ति एक क्वेरी निष्पादित करेगा....
आशा है कि यह मदद करता है।