Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Wie speichert man PDF-Dateien in MySQL als BLOBs mit PHP?

BEARBEITET ZUM HINZUFÜGEN :Der folgende Code ist veraltet und funktioniert nicht in PHP 7. Weitere Einzelheiten finden Sie im Hinweis am Ende der Antwort.

Unter der Annahme einer Tabellenstruktur mit einer Integer-ID und einer Blob-Datenspalte und unter der Annahme, dass MySQL-Funktionen als Schnittstelle zur Datenbank verwendet werden, könnten Sie wahrscheinlich so etwas tun:

$result = mysql_query 'INSERT INTO table (
    data
) VALUES (
    \'' . mysql_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf')) . '\'
);';

Ein Wort der Warnung:Das Speichern von Blobs in Datenbanken wird im Allgemeinen nicht als die beste Idee angesehen, da dies zu einem Aufblähen von Tabellen führen kann und eine Reihe anderer damit verbundener Probleme hat. Ein besserer Ansatz wäre, die Datei irgendwo im Dateisystem zu verschieben, wo sie abgerufen werden kann, und den Pfad zur Datei in der Datenbank anstelle der Datei selbst zu speichern.

Außerdem wird von der Verwendung von mysql_*-Funktionsaufrufen abgeraten, da diese Methoden effektiv veraltet sind und nicht wirklich für MySQL-Versionen neuer als 4.x entwickelt wurden. Sie sollten stattdessen zu mysqli oder PDO wechseln.

AKTUALISIEREN :mysql_*-Funktionen sind veraltet in PHP 5.x und werden VOLLSTÄNDIG IN PHP 7 ENTFERNT! Ihnen bleibt nun nichts anderes übrig, als auf eine modernere Database Abstraction (MySQLI, PDO) umzusteigen. Ich habe mich entschieden, die ursprüngliche Antwort oben aus historischen Gründen intakt zu lassen, verwende sie aber nicht wirklich

So machen Sie es mit mysqli im prozeduralen Modus:

$result = mysqli_query ($db, 'INSERT INTO table (
    data
) VALUES (
    \'' . mysqli_real_escape_string (file_get_contents ('/path/to/the/file/to/store.pdf'), $db) . '\'
);');

Am besten geht das mit vorbereiteten MySQLI/PDO-Anweisungen.