In MySQL die LOAD_FILE()
Funktion liest eine Datei und gibt ihren Inhalt als String zurück.
Syntax
Die Syntax lautet wie folgt:
LOAD_FILE(file_name)
Wobei file_name
ist der vollständige Pfad zur Datei.
Beispiel
Hier ist ein Beispiel, wo ich den Inhalt aus einer Datei auswähle:
SELECT LOAD_FILE('/data/test.txt') AS Result;
Ergebnis:
+------------------------------------------+ | Result | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Ein Datenbankbeispiel
Hier ist ein Beispiel dafür, wie eine Abfrage aussehen könnte, wenn der Inhalt der Datei in eine Datenbank eingefügt wird:
INSERT INTO MyTable (FileId, UserId, MyBlobColumn) VALUES (1, 20, LOAD_FILE('/data/test.txt'));
In diesem Fall die Spalte MyBlobColumn
hat den Datentyp BLOB (was es ermöglicht, binäre Daten zu speichern).
Und jetzt, da es in der Datenbank ist, können wir es auswählen:
SELECT MyBlobColumn FROM MyTable WHERE UserId = 20;
Ergebnis:
+------------------------------------------+ | MyBlobColumn | +------------------------------------------+ | This text is all that the file contains! | +------------------------------------------+
Wenn die Datei nicht existiert
Wenn die Datei nicht existiert, NULL wird zurückgegeben:
SELECT LOAD_FILE('/data/oops.txt') AS Result;
Ergebnis:
+--------+ | Result | +--------+ | NULL | +--------+
Weitere Gründe, warum Sie NULL erhalten könnten
Sie erhalten auch NULL eine der folgenden Bedingungen ist nicht erfüllt:
- Die Datei muss sich auf dem Serverhost befinden.
- Sie müssen die
FILE
haben Privileg, um die Datei zu lesen. Ein Benutzer, der dieFILE
hat kann jede Datei auf dem Server-Host lesen, die entweder allgemein oder vom MySQL-Server gelesen werden kann. - Die Datei muss für alle lesbar und kleiner als
max_allowed_packet
sein Bytes. So können Sie das überprüfen:SHOW VARIABLES LIKE 'max_allowed_packet';
Mein Ergebnis:
+--------------------+----------+ | Variable_name | Value | +--------------------+----------+ | max_allowed_packet | 67108864 | +--------------------+----------+
- Falls der
secure_file_priv
Systemvariable auf einen nicht leeren Verzeichnisnamen gesetzt ist, muss sich die zu ladende Datei in diesem Verzeichnis befinden. So können Sie das überprüfen:SHOW VARIABLES LIKE 'secure_file_priv';
Mein Ergebnis:
+------------------+--------+ | Variable_name | Value | +------------------+--------+ | secure_file_priv | /data/ | +------------------+--------+
In diesem Beispiel kann ich nur Dateien aus /data/ lesen Verzeichnis.