No MySQL, o
LOAD_FILE()
A função lê um arquivo e retorna seu conteúdo como uma string. Sintaxe
A sintaxe fica assim:
LOAD_FILE(file_name)
Onde
file_name
é o caminho completo para o arquivo. Exemplo
Aqui está um exemplo em que seleciono o conteúdo de um arquivo:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Resultado:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Um exemplo de banco de dados
Aqui está um exemplo da aparência de uma consulta ao inserir o conteúdo do arquivo em um banco de dados:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
Neste caso, a coluna
MyBlobColumn
tem um tipo de dados BLOB (que permite armazenar dados binários). E agora que está no banco de dados, podemos selecioná-lo:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Resultado:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Se o arquivo não existir
Se o arquivo não existir, NULL é retornado:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Resultado:
+--------+ | Result | +--------+ | NULL | +--------+
Mais razões pelas quais você pode obter NULL
Você também receberá NULL uma das seguintes condições não for atendida:
- O arquivo deve estar localizado no host do servidor.
- Você deve ter o
FILE
privilégio para ler o arquivo. Um usuário que tem oFILE
privilégio pode ler qualquer arquivo no host do servidor que seja legível pelo mundo ou pelo servidor MySQL. - O arquivo deve ser legível por todos e seu tamanho deve ser menor que
max_allowed_packet
bytes. Veja como você pode verificar isso:SHOW VARIABLES LIKE 'max_allowed_packet';
Meu resultado:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Se o
secure_file_priv
A variável de sistema é definida como um nome de diretório não vazio, o arquivo a ser carregado deve estar localizado nesse diretório. Veja como você pode verificar isso:SHOW VARIABLES LIKE 'secure_file_priv';
Meu resultado:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
Neste exemplo, só posso ler arquivos do arquivo /data/ diretório.