2014-11-04 2 views
0

У меня есть базовый инструмент импорта, который мы используем для загрузки в нашу базу данных с помощью PHP. Вот пример скрипта. Мой вопрос: как я могу проверить заголовки перед импортом? В основном сверьте значение, чтобы убедиться, что правильный файл становится imported.I посмотрел везде в Интернете, но не может найти ответ Моих заголовковValidate Headers ON CSV & TXT

SKU, Цена, Активного

LOAD DATA LOW_PRIORITY LOCAL INFILE '$ file' В ТАБЛИЦЕ sample. your_temp_table ПОЛЯ TERMINATED BY '' OPTIONALLY ПРИЛАГАЕМОГО BY '\ "' ЛИНИЙ TERMINATED BY '\ п' IGNORE 1 LINES // Продолжать работать остальной сценарий

Мой вопрос заключается в том, чтобы проверить заголовки перед тем сценарий побежал Я использую

$ файла = $ _GET [ 'файл'];? $ файл = urldecode ($ файла); // получение файла при загрузке

+0

Passing '$ _GET' значения непосредственно в запросе является [супер плохая идея] (HTTP : //bobby-tables.com/). Пожалуйста, абсолютно уверен, что [правильно сбежал] (http://bobby-tables.com/). – tadman

+0

Я понимаю. Что бы вы рекомендовали, это лучшее решение? –

+0

Экранирование вещей - лучшее решение. Еще лучше: использование уровня базы данных, такого как PDO, который поддерживает привязку к заполнителям. – tadman

ответ

4

Я думаю, вам нужно будет прочитать первую строку $file и сравнить его с установленным списком заголовков:

$requiredHeaders = array('SKU', 'Price', 'Active'); //headers we expect 

$f = fopen($file, 'r'); 
$firstLine = fgets($f); //get first line of csv file 
fclose($f) 

$foundHeaders = str_getcsv(trim($firstLine), ',', '"'); //parse to array 

if ($foundHeaders !== $requiredHeaders) { 
    echo 'Headers do not match: '.implode(', ', $foundHeaders); 
    die(); 
} 

//run import script… 
+0

Спасибо за быстрый ответ. Я не уверен в $ f = fopen ($ file, 'r'); Остальное я могу попробовать, и я дам вам знать. –

+0

Стоит отметить, что с некоторой дополнительной кодировкой вы можете заставить инструкцию 'INSERT' адаптироваться к тем, какие заголовки присутствуют. – tadman

+0

Не могли бы вы объяснить, что @tadman? –