W MySQL funkcja LOAD_FILE()
funkcja czyta plik i zwraca jego zawartość jako ciąg.
Składnia
Składnia wygląda tak:
LOAD_FILE(file_name)
Gdzie file_name
to pełna ścieżka do pliku.
Przykład
Oto przykład, w którym wybieram zawartość z pliku:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Wynik:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Przykład bazy danych
Oto przykład tego, jak może wyglądać zapytanie podczas wstawiania zawartości pliku do bazy danych:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
W tym przypadku kolumna MyBlobColumn
ma typ danych BLOB (co pozwala na przechowywanie danych binarnych).
A teraz, gdy znajduje się w bazie danych, możemy go wybrać:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Wynik:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Jeśli plik nie istnieje
Jeśli plik nie istnieje, NULL jest zwracany:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Wynik:
+--------+ | Result | +--------+ | NULL | +--------+
Więcej powodów, dla których możesz uzyskać NULL
Otrzymasz również NULL nie jest spełniony jeden z następujących warunków:
- Plik musi znajdować się na hoście serwera.
- Musisz mieć
FILE
uprawnienia w celu odczytania pliku. Użytkownik, który maFILE
przywilej może odczytać dowolny plik na hoście serwera, który może być odczytywany na całym świecie lub przez serwer MySQL. - Plik musi być czytelny dla wszystkich, a jego rozmiar mniejszy niż
max_allowed_packet
bajty. Oto jak możesz to sprawdzić:SHOW VARIABLES LIKE 'max_allowed_packet';
Mój wynik:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Jeśli
secure_file_priv
zmienna systemowa jest ustawiona na niepustą nazwę katalogu, plik do załadowania musi znajdować się w tym katalogu. Oto jak możesz to sprawdzić:SHOW VARIABLES LIKE 'secure_file_priv';
Mój wynik:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
W tym przykładzie mogę czytać tylko pliki z /data/ katalog.