En MySQL, el LOAD_FILE()
La función lee un archivo y devuelve su contenido como una cadena.
Sintaxis
La sintaxis es así:
LOAD_FILE(file_name)
Donde file_name
es la ruta completa al archivo.
Ejemplo
Aquí hay un ejemplo donde selecciono el contenido de un archivo:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Resultado:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Un ejemplo de base de datos
Este es un ejemplo de cómo se vería una consulta al insertar el contenido del archivo en una base de datos:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
En este caso, la columna MyBlobColumn
tiene un tipo de datos de BLOB (lo que le permite almacenar datos binarios).
Y ahora que está en la base de datos, podemos seleccionarlo:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Resultado:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Si el archivo no existe
Si el archivo no existe, NULL se devuelve:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
Más razones por las que podría obtener NULL
También obtendrá NULL no se cumple una de las siguientes condiciones:
- El archivo debe estar ubicado en el host del servidor.
- Debe tener el
FILE
privilegio para leer el archivo. Un usuario que tiene elFILE
El privilegio puede leer cualquier archivo en el host del servidor que sea legible por el mundo o por el servidor MySQL. - El archivo debe ser legible para todos y su tamaño debe ser inferior a
max_allowed_packet
bytes Así es como puede comprobarlo:SHOW VARIABLES LIKE 'max_allowed_packet';
Mi resultado:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Si
secure_file_priv
la variable del sistema está establecida en un nombre de directorio no vacío, el archivo que se va a cargar debe estar ubicado en ese directorio. Así es como puede comprobarlo:SHOW VARIABLES LIKE 'secure_file_priv';
Mi resultado:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
En este ejemplo, solo puedo leer archivos de /data/ directorio.