In MySQL, il LOAD_FILE()
la funzione legge un file e ne restituisce il contenuto come stringa.
Sintassi
La sintassi è questa:
LOAD_FILE(file_name)
Dove file_name
è il percorso completo del file.
Esempio
Ecco un esempio in cui seleziono i contenuti da un file:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Risultato:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Un esempio di database
Ecco un esempio di come potrebbe apparire una query quando si inserisce il contenuto del file in un database:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
In questo caso, la colonna MyBlobColumn
ha un tipo di dati BLOB (che gli consente di memorizzare dati binari).
E ora che è nel database, possiamo selezionarlo:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Risultato:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Se il file non esiste
Se il file non esiste, NULL viene restituito:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Risultato:
+--------+ | Result | +--------+ | NULL | +--------+
Altri motivi per cui potresti diventare NULL
Riceverai anche NULL una delle seguenti condizioni non è soddisfatta:
- Il file deve trovarsi sull'host del server.
- Devi avere il
FILE
privilegio per leggere il file. Un utente che ha ilFILE
privilegio può leggere qualsiasi file sull'host del server che sia leggibile dal mondo intero o leggibile dal server MySQL. - Il file deve essere leggibile da tutti e di dimensioni inferiori a
max_allowed_packet
byte. Ecco come puoi verificarlo:SHOW VARIABLES LIKE 'max_allowed_packet';
Il mio risultato:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Se il
secure_file_priv
la variabile di sistema è impostata su un nome di directory non vuoto, il file da caricare deve trovarsi in quella directory. Ecco come puoi verificare che:SHOW VARIABLES LIKE 'secure_file_priv';
Il mio risultato:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
In questo esempio, posso solo leggere i file da /data/ directory.