I MySQL, LOAD_FILE()
funktionen läser en fil och returnerar dess innehåll som en sträng.
Syntax
Syntaxen ser ut så här:
LOAD_FILE(file_name)
Där file_name
är den fullständiga sökvägen till filen.
Exempel
Här är ett exempel där jag väljer innehållet från en fil:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Resultat:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Ett databasexempel
Här är ett exempel på hur en fråga kan se ut när du infogar innehållet i filen i en databas:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
I det här fallet, kolumnen MyBlobColumn
har datatypen BLOB (som gör att den kan lagra binär data).
Och nu när den finns i databasen kan vi välja den:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Resultat:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Om filen inte finns
Om filen inte finns, NULL returneras:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Resultat:
+--------+ | Result | +--------+ | NULL | +--------+
Fler anledningar till att du kan få NULL
Du får också NULL ett av följande villkor är inte uppfyllt:
- Filen måste finnas på servervärden.
- Du måste ha
FILE
behörighet för att läsa filen. En användare som harFILE
privilegium kan läsa vilken fil som helst på servervärden som antingen är världsläsbar eller läsbar av MySQL-servern. - Filen måste vara läsbar för alla och dess storlek är mindre än
max_allowed_packet
bytes. Så här kan du kontrollera att:SHOW VARIABLES LIKE 'max_allowed_packet';
Mitt resultat:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Om
secure_file_priv
systemvariabeln är inställd på ett icke-tomt katalognamn, filen som ska laddas måste finnas i den katalogen. Så här kan du kontrollera att:SHOW VARIABLES LIKE 'secure_file_priv';
Mitt resultat:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
I det här exemplet kan jag bara läsa filer från /data/ katalog.