MySQL загрузки данных через PHP-скрипт — не работает

Я пытаюсь использовать MySQL LOAD DATA LOCAL INFILE чтобы получить некоторые данные CSV в моей базе данных MySQL через PHP-скрипт с использованием MySQL. Вот как выглядит моя строка 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;

Вот как выглядит мой 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 для включения local-infile в [mysql] и [mysqld] — так что я сделал это.

Когда я запускаю SQL-запрос через оболочку, он работает. Когда я пытаюсь сделать это через скрипт php, сообщение об ошибке ($ message), которое я сейчас получаю, говорит:

The user update failed: Access denied for user ''@'localhost' (using password: NO)

Одна странная вещь в том, что он не показывает никакого имени пользователя перед @ ‘localhost’. Не могу понять почему. Кроме того, я использую ту же настройку соединения, чтобы запускать обычные запросы SELECT из базы данных, используя скрипты php. Пользователь также имеет привилегии FILE.

Я много искал, но не нашел ничего, что могло бы объяснить, что происходит. Любые советы будут высоко ценится.

2

Решение

Вы смешиваете MySQL API с mysql_ а также mysqli_ функционирует в нескольких случаях.

  • mysql_affected_rows()
  • mysql_error()

Они делают не перемешать; использование mysqli_ исключительно.

Кроме того, вы не используете скобки в [user] и т.д., а ты? Это синтаксис MSSQL, удалите их.

Плюс в mysqli_, Соединение с БД на первом месте, инвертировать эти $result = mysqli_query($sql, $con); читать как $result = mysqli_query($con, $sql);

$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($con, $sql);

if (mysqli_affected_rows($con) == 1) {
$message = "The data was successfully added!";
} else {
$message = "The user update failed: ";
$message .= mysqli_error($con);
};

echo $message;
mysqli_close($con);
7

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

Других решений пока нет …

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