In MySQL is de LOAD_FILE() functie leest een bestand en retourneert de inhoud als een tekenreeks.
Syntaxis
De syntaxis gaat als volgt:
LOAD_FILE(file_name)
Waar file_name is het volledige pad naar het bestand.
Voorbeeld
Hier is een voorbeeld waarin ik de inhoud van een bestand selecteer:
SELECT LOAD_FILE('/data/test.txt') AS Result; Resultaat:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Een databasevoorbeeld
Hier is een voorbeeld van hoe een query eruit zou kunnen zien wanneer de inhoud van het bestand in een database wordt ingevoegd:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn)
VALUES (1, 20, LOAD_FILE('/data/test.txt'));
In dit geval is de kolom MyBlobColumn heeft het gegevenstype BLOB (waardoor het binaire gegevens kan opslaan).
En nu het in de database staat, kunnen we het selecteren:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Resultaat:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Als het bestand niet bestaat
Als het bestand niet bestaat, NULL wordt geretourneerd:
SELECT LOAD_FILE('/data/oops.txt') AS Result; Resultaat:
+--------+ | Result | +--------+ | NULL | +--------+
Meer redenen waarom je NULL zou kunnen krijgen
Je krijgt ook NULL aan een van de volgende voorwaarden is niet voldaan:
- Het bestand moet zich op de serverhost bevinden.
- U moet het
FILE. hebben privilege om het bestand te lezen. Een gebruiker die deFILE. heeft privilege kan elk bestand op de serverhost lezen dat voor de hele wereld leesbaar is of leesbaar is voor de MySQL-server. - Het bestand moet voor iedereen leesbaar zijn en moet kleiner zijn dan
max_allowed_packetbytes. U kunt dat als volgt controleren:SHOW VARIABLES LIKE 'max_allowed_packet';
Mijn resultaat:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Als de
secure_file_privsysteemvariabele is ingesteld op een niet-lege mapnaam, moet het te laden bestand zich in die map bevinden. Zo kunt u dat controleren:SHOW VARIABLES LIKE 'secure_file_priv';
Mijn resultaat:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
In dit voorbeeld kan ik alleen bestanden lezen van de /data/ directory.