Загрузка данных в файл работает в MySQL Workbench, но не в PHP - PullRequest
0 голосов
/ 11 октября 2018

если я запускаю следующий sql на MySQL Workbench, то все работает нормально, но как только я пытаюсь вызвать его через PHP:

LOAD DATA INFILE 'C://stats/imports/All Members/ALL_MEMBERS_(ACTIVE)_30_09_2018.csv'
INTO TABLE stats.members_test
FIELDS TERMINATED BY ',' 
OPTIONALLY ENCLOSED BY '\"'
ESCAPED BY '\\\\'  
LINES TERMINATED BY '\\r\\n'
IGNORE 1 LINES
(mem_no, @entered_on, @date_of_joining, mem_status, @mem_status_date, pitch_code, branch_code, section_code, sub_section_code, mem_sector, emp_status, employer, homeworker, workplace, personal_contract, pay_method, @date_paid_upto, home_country, work_country, equal_opps_consent, mem_ben_consent, priv_agree_consent, app_method, age, gender)
SET date_of_joining = str_to_date(@date_of_joining,'%d-%b-%Y'), 
entered_on = str_to_date(@entered_on,'%d-%b-%Y'), 
mem_status_date = str_to_date(@mem_status_date,'%d-%b-%Y'), 
date_paid_upto = str_to_date(@date_paid_upto,'%d-%b-%Y')

... я получаю сообщение об ошибке:

SQLSTATE [42000]: синтаксическая ошибка или нарушение доступа: 1064 В синтаксисе SQL есть ошибка;проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы узнать правильный синтаксис для использования рядом с '' (mem_no, @entered_on, @date_of_joining, mem_status, @mem_s 'в строке 6

веб-приложение, база данныхи файл csv находятся на одном сервере.

Код PHP:

function loadData() {


    try
    {
        $db = DAO::ConnectToDB();
        $sql = "LOAD DATA INFILE 'C://stats/imports/All Members/ALL_MEMBERS_(ACTIVE)_30_09_2018.csv'
                INTO TABLE stats.members_test
                FIELDS TERMINATED BY ',' 
                OPTIONALLY ENCLOSED BY '\"'
                ESCAPED BY '\\'  
                LINES TERMINATED BY '\r\n'
                (mem_no, @entered_on, @date_of_joining, mem_status, @mem_status_date, pitch_code, branch_code, section_code, sub_section_code, mem_sector, emp_status, employer, homeworker, workplace, personal_contract, pay_method, @date_paid_upto, home_country, work_country, equal_opps_consent, mem_ben_consent, priv_agree_consent, app_method, age, gender)
                SET date_of_joining = str_to_date(@date_of_joining,'%d-%b-%Y'), 
                entered_on = str_to_date(@entered_on,'%d-%b-%Y'), 
                mem_status_date = str_to_date(@mem_status_date,'%d-%b-%Y'), 
                date_paid_upto = str_to_date(@date_paid_upto,'%d-%b-%Y')";


        $db->exec($sql);

    }

    catch(PDOException $e) 
    {
        $myError =  $e->getMessage();
        return $myError;
    }

Проблема решена. Пришлось добавить дополнительные escape-символы в ESCAPED BY и LINES TERMINATED BY. Приведенный выше кодсейчас работает.

...