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
FILEprivilegio para leer el archivo. Un usuario que tiene elFILEEl 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_packetbytes Así es como puede comprobarlo:SHOW VARIABLES LIKE 'max_allowed_packet';
Mi resultado:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Si
secure_file_privla 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.