Dans MySQL, le LOAD_FILE()
la fonction lit un fichier et renvoie son contenu sous forme de chaîne.
Syntaxe
La syntaxe ressemble à ceci :
LOAD_FILE(file_name)
Où file_name
est le chemin d'accès complet au fichier.
Exemple
Voici un exemple où je sélectionne le contenu d'un fichier :
SELECT LOAD_FILE('/data/test.txt') AS Result;
Résultat :
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Un exemple de base de données
Voici un exemple de ce à quoi pourrait ressembler une requête lors de l'insertion du contenu du fichier dans une base de données :
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
Dans ce cas, la colonne MyBlobColumn
a un type de données BLOB (ce qui lui permet de stocker des données binaires).
Et maintenant qu'il est dans la base de données, nous pouvons le sélectionner :
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Résultat :
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Si le fichier n'existe pas
Si le fichier n'existe pas, NULL est renvoyé :
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Résultat :
+--------+ | Result | +--------+ | NULL | +--------+
Plus de raisons pour lesquelles vous pourriez obtenir NULL
Vous obtiendrez également NULL l'une des conditions suivantes n'est pas remplie :
- Le fichier doit être situé sur l'hôte du serveur.
- Vous devez avoir le
FILE
privilège pour lire le fichier. Un utilisateur qui a leFILE
privilège peut lire n'importe quel fichier sur l'hôte du serveur qui est soit lisible par tout le monde, soit lisible par le serveur MySQL. - Le fichier doit être lisible par tous et sa taille inférieure à
max_allowed_packet
octets. Voici comment vous pouvez vérifier cela :SHOW VARIABLES LIKE 'max_allowed_packet';
Mon résultat :
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Si le
secure_file_priv
variable système est définie sur un nom de répertoire non vide, le fichier à charger doit se trouver dans ce répertoire.Voici comment vous pouvez vérifier que :SHOW VARIABLES LIKE 'secure_file_priv';
Mon résultat :
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
Dans cet exemple, je ne peux lire que les fichiers de /data/ répertoire.