V MySQL je to LOAD_FILE()
funkce přečte soubor a vrátí jeho obsah jako řetězec.
Syntaxe
Syntaxe vypadá takto:
LOAD_FILE(file_name)
Kde file_name
je úplná cesta k souboru.
Příklad
Zde je příklad, kdy vyberu obsah ze souboru:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Výsledek:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Příklad databáze
Zde je příklad toho, jak může vypadat dotaz při vkládání obsahu souboru do databáze:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
V tomto případě sloupec MyBlobColumn
má datový typ BLOB (což mu umožňuje ukládat binární data).
A teď, když je v databázi, můžeme ho vybrat:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Výsledek:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Pokud soubor neexistuje
Pokud soubor neexistuje, NULL je vráceno:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Výsledek:
+--------+ | Result | +--------+ | NULL | +--------+
Další důvody, proč byste mohli získat NULL
Získáte také NULL není splněna jedna z následujících podmínek:
- Soubor musí být umístěn na hostitelském serveru.
- Musíte mít
FILE
oprávnění číst soubor. Uživatel, který máFILE
privilegium může číst jakýkoli soubor na hostitelském serveru, který je buď světově čitelný nebo čitelný serverem MySQL. - Soubor musí být čitelný pro všechny a jeho velikost musí být menší než
max_allowed_packet
bajtů. Zde je návod, jak to zkontrolovat:SHOW VARIABLES LIKE 'max_allowed_packet';
Můj výsledek:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Pokud
secure_file_priv
systémová proměnná je nastavena na neprázdný název adresáře, soubor, který má být načten, musí být umístěn v tomto adresáři. Zde je návod, jak to můžete zkontrolovat:SHOW VARIABLES LIKE 'secure_file_priv';
Můj výsledek:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
V tomto příkladu mohu číst pouze soubory z /data/ adresář.