Я пытаюсь использовать mysql LOAD DATA LOCAL INFILE
, чтобы получить некоторые данные csv в моей базе данных mysql с помощью php-скрипта с использованием mysqli. Это то, что моя SQL строка выглядит следующим образом:mysql load data infile через php script - не работает
LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv' INTO TABLE dashmaker.HHdata FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES;
Это то, что мой PHP скрипт выглядит следующим образом:
$sql = "LOAD DATA LOCAL INFILE '/var/www/html/dashmaker/uploads/HHdata.csv'
INTO TABLE dashmaker.HHdata
FIELDS TERMINATED BY ','
OPTIONALLY ENCLOSED BY '\"'
LINES TERMINATED BY '\n'
IGNORE 1 LINES;";
$con=mysqli_connect("localhost","[user]","[password]","[database]");
// Check connection
if (mysqli_connect_errno()) {
echo "Failed to connect to MySQL: " . mysqli_connect_error();
};
$result = mysqli_query($sql, $con);
if (mysql_affected_rows() == 1) {
$message = "The data was successfully added!";
} else {
$message = "The user update failed: ";
$message .= mysql_error();
};
echo $message;
mysqli_close($con);
я обнаружил, что мне нужно, чтобы установить MySQL my.cnf включить локальный-INFILE под [mysql] и [mysqld] - поэтому я сделал это.
Когда я запускаю запрос sql через оболочку, он работает. Когда я пытаюсь сделать это через PHP скрипт сообщение об ошибке ($ сообщение) теперь я получаю говорит:
The user update failed: Access denied for user ''@'localhost' (using password: NO)
Одно странно то, что он не показывает имя пользователя перед @ «локальный». Не могу понять, почему. Кроме того, я использую тот же параметр подключения для запуска обычных запросов SELECT из базы данных с использованием php-скриптов. Пользователь также имеет привилегии FILE.
Я искал экстенсивно, но не нашел ничего, что могло бы объяснить, что происходит. Любые советы будут высоко ценится.
Вы смешивания API для MySQL с '' mysql_' и mysqli_' функций. Они не ** смешивают; используйте 'mysqli_' исключительно. Кроме того, вы не используете скобки в '[user]' и т. Д., Не так ли? Это не MSSQL, это MySQL, удалите их. –
Плюс, в mysqli_, соединение DB приходит первым, инвертируйте эти '$ result = mysqli_query ($ sql, $ con);' для чтения как '$ result = mysqli_query ($ con, $ sql);' –
Спасибо! Невероятно быстрый ответ! Это работает. Я думаю, что сообщение об ошибке также отбрасывало меня - mysql_affected_rows() теперь mysql_affected_rows ($ con) ... и я не использовал квадратные скобки для пользователя/пароля - просто означало, что это были заполнители. Еще раз спасибо! –