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_packet
bytes. 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_priv
systeemvariabele 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.