mysql — как загрузить данные из локального файла в php с помощью драйвера pdo

У меня есть функция, которая должна загружать данные в MySQL DB из файла CSV, поэтому я написал некоторый код:

try {

$pdo = new PDO('mysql:host=localhost;dbname=borsino_ittico',
'XXXXX', 'XXXXX',
array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4",
PDO::MYSQL_ATTR_LOCAL_INFILE => true,
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION)
);}
catch (PDOException $e) {
$mex= "database connection failed: ".$e->getMessage();
return $mex;
}

другой код

try {
$affectedRows = $pdo->exec("LOAD DATA LOCAL INFILE ".$pdo->quote($file)." INTO TABLE ".
$pdo->quote($dbTable)." FIELDS TERMINATED BY ';'
LINES TERMINATED BY '\n,\\n'");

$mex= "Loaded a total of $affectedRows records from this csv file.\n";
return $mex;

}
catch (PDOException $e) {
$mex= "ATTENZIONE, ERRORE CARICAMENTO DATI: ".$e->getMessage();
return $mex;
}

На самом деле это, кажется, не работает, и бросил исключение:

SQLSTATE [42000]: синтаксическая ошибка или нарушение прав доступа: 1064 В синтаксисе SQL имеется ошибка; проверьте руководство, соответствующее вашей версии сервера MySQL, на предмет правильного синтаксиса, который можно использовать рядом с полем » asta ‘TERMINATED BY’; ‘ ЛИНИИ, ПРЕКРАЩЕННЫЕ ‘, \ n’ ‘в строке 1

Первый вопрос о $ file (ресурс):
должен быть в абсолютной / относительной форме (например, c: \ xxx \ csvfile.csv или .. \ xxx \ csvfile.csv), или я должен предоставить его с помощью функции like $csvFile=fopen($file,"r");

Затем я должен использовать родную функцию pdo $pdo->quote() для вставки аргументов (таких как файл, имя таблицы, разделитель, строки, оканчивающиеся на) в запросе $ disabledRows?

Как я могу форсировать выполнение запроса даже с некоторыми ошибками в некоторой строке?

0

Решение

Вы цитируете свое имя таблицы, производя

... INTO table 'asta' ...

'Кавычки превращают вещи в строки. Так asta больше не имя таблицы, это просто строка с буквами a, s, так далее…

Идентификаторы должны быть заключены в кавычки:

... INTO table `asta` ...
^----^---
1

Другие решения

LINES TERMINATED BY '\n,\\n'

не работает для меня !!!! после многих испытаний единственное решение состоит в том, чтобы удалить двойной побег \\n

Так

`LINES TERMINATED BY '\n'`

работает, даже если где-то я читал о необходимости «экранировать» символ «\» для PHP.

0

По вопросам рекламы [email protected]