если я запускаю следующий 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. Приведенный выше кодсейчас работает.