mysql_connect с параметром —local-infile

Не удается загрузить данные из загруженного (локального) файла с момента обновления mysql (текущая версия: версия сервера: 5.5.44-0 + deb8u1 (Debian)), подразумеваются следующие файлы:

dbconnection.php

<?php
$server = "localhost";
$user = "TheUser";
$pass = "ThePass";
$db_name = "DbName";
$link = mysql_connect($server, $user, $pass);
mysql_select_db($db_name);
mysql_set_charset('utf8', $link);
?>

send2db.php

<?php
include 'dbconnection.php';
mysql_select_db("DbName") or die(mysql_error());
$query = "LOAD DATA LOCAL INFILE '$file' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"' ";
mysql_query($query) or die(mysql_error());
?>

Ошибка говорит:

ERROR 1148 (42000): The used command is not allowed with this MySQL version

Внутри mysql:

SHOW GLOBAL VARIABLES LIKE 'local_infile';
+---------------+-------+
| Variable_name | Value |
+---------------+-------+
| local_infile  | ON    |
+---------------+-------+
1 row in set (0.00 sec)

Но если я получу доступ к mysql таким образом, файлы могут быть загружены:

mysql --local-infile -p

Итак, мой вопрос, могу ли я установить эту опцию в файле dbconnection.php, я уже много раз пробовал безуспешно, я читал посты о конфигурации my.cnf и некоторых других вещах, но у меня ничего не работает, любой предложение?

Спасибо

ОБНОВИТЬ:
Я отсутствовал, меняя код всей сети на mysqli, уффф !!, хорошо следуя советам из приведенных ниже ответов, я сделал следующий код, но безуспешно, но все равно получаю сообщение: «Используемая команда не разрешена с эта версия MySQL «. Подразумеваемые файлы следующие:

acessdb.php

<?php
$link = new mysqli($server, $user, $pass, $dbname);
?>

send2db.php

<?php include 'acessdb.php';
$link->options(MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link));
$link->options(MYSQLI_OPT_LOCAL_INFILE, false);
?>

Какие-либо предложения?

5

Решение

Установите параметр в my.cnf (или в файле конфигурации mysql в вашей системе):

local-infile=1

Перезапустите службу MySQL, и это должно решить проблему для вас.

ОБНОВИТЬ
Еще один вариант попробовать с PHP

$conn = mysqli_init();
$conn->options(MYSQLI_OPT_LOCAL_INFILE, true);

Попробуйте и посмотрите, работает ли это. Опция ссылка mysqli options

3

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

LOCAL INFILE это механизм, с помощью которого сервер базы данных может запросить более или менее любой файл у клиента базы данных (= сервер PHP). Если вы не можете полностью доверять своему серверу и сети, это может быть опасно. Следовательно LOCAL INFILE должно быть разрешено как на сервере (как вы сделали), так и на клиенте базы данных.

Вы используете старый устаревший и не поддерживается mysql расширение PHP. Это расширение не поддерживает установку флага. Вы должны переключиться на mysqli который имеет MYSQLI_OPT_LOCAL_INFILE возможность включить этот режим.

<?php
$m = new mysqli(...);
$m->option(MYSQLI_OPT_LOCAL_INFILE, true);
$m->query("LOAD DATA LOCAL INFILE ....");
$m->option(MYSQLI_OPT_LOCAL_INFILE, false);
?>
0

Хорошо, наконец-то я нашел способ, вот рабочий код:

файл: connectdb.php

$link = mysqli_init();
mysqli_options($link, MYSQLI_OPT_LOCAL_INFILE, true);
mysqli_real_connect($link, $server, $user, $pass, $dbname);

файл: send2db.php

mysqli_query($link, "LOAD DATA LOCAL INFILE 'upfiles/file.csv' INTO TABLE `T1` FIELDS TERMINATED BY ';' OPTIONALLY ENCLOSED BY '\"'") or die(mysqli_error($link));

Я надеюсь, что это помогает.

0

Поскольку mysql_connect () устарела начиная с PHP 5.5.0 (и будет удален в будущем), не исключено, что проблема исходит от вашего веб-сервера (Apache?), А не от версии SQL.

Еще одна вещь, которая может вызвать эту проблему, — это содержимое вашего файла, которое в конечном итоге содержит команду depreacted (это то, что вам кажется в сообщении об ошибке).

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