Używanie mysql LOAD w PHP nie powiedzie się, ale robi to za pomocą linii poleceń
Mam stronę internetową php, która pozwala osobie przesłać plik. Chcę wyodrębnić nazwę pliku z $ _FILE, a następnie załadować wszystkie dane do mojej bazy danych.
Mój kod wygląda tak:
$myfile = $_FILE['file']['tmp_file'];
$executebatchloadsql = 'LOAD DATA LOCAL INFILE "'. $myfile .'" INTO TABLE testtable (fname, lname);
mysql_query($executebatchloadsql) or die(mysql_error());
Ale komunikat o błędzie, który otrzymuję, mówi:
Użyta komenda nie jest dozwolona w tej wersji MySQL
Moje pytania są następujące
Czy mam użyćtmp_file
imię lub nazwisko?Co muszę zrobić, aby uruchomić polecenie ładowania danych? Próbowałem śledzić post znaleziony pod adresemMySQL: Włącz LOAD DATA LOCAL INFILE ale wciąż daje mi ten sam błąd.EDYTUJ 1:
Tak wygląda mój plik /etc/mysql/my.cnf:
[mysqld]
user = mysql
pid-file = /var/run/mysqld/mysqld.pid
socket = /var/run/mysqld/mysqld.sock
port = 3306
basedir = /usr
datadir = /var/lib/mysql
tmpdir = /tmp
lc-messages-dir = /usr/share/mysql
skip-external-locking
local-infile
Ostatnia linia jest tym, co dodałem. Dodałem również tę samą linię do sekcji [mysql]:
[mysql]
local-infile
Po wprowadzeniu tych zmian zrestartowałem sql:
/etc/init.d/mysql restart
Ale nadal mam problem
EDYCJA 2:
Próbowałem także local-infile = 1, jak na ten sam wpis, o którym wspomniałem powyżej. Ale to też nie działa.
EDYCJA 3
Próbowałem dodać plik FILE do użytkownika .. tak:
GRANT FILE ON *.* TO root;
a kiedy pokażę granty dla roota, widzę, że został dodany. ale wciąż otrzymuję komunikat o błędzie, że używane polecenie nie jest dozwolone w mojej wersji mysql. Czy potrzebuję „= 1” po pliku w moim pliku my.cfg?
EDYTUJ 4:
Jako kolejny test próbowałem załadować plik ręcznie za pomocą wiersza poleceń, a nie przez php i zaakceptowałem go. Zalogowałem się jako root (co jest identycznym identyfikatorem używam mojej aplikacji do celów testowych), a następnie spróbowałem następującej komendy:
mysql> load data local infile '/var/www/testwebsite/abc.csv' into table testtable;
Query OK, 3 rows affected, 48 warnings (0.00 sec)
Records: 3 Deleted: 0 Skipped: 0 Warnings: 48
Ale nie wydaje mi się, aby kod PHP działał. Dzięki.!