Frage

Ich bin versucht, eine PDF-Datei in einen MySQL-Datenbank mit PHP zu laden.

Es ist alles gut, außer für den Inhalt der Datei. Egal wie ich scheinen versuchen, Sonderzeichen zu entkommen, die Abfrage immer fehlschlägt, meist mit „Unbekannter Befehl \ n“.

Ich habe verwendet addslashes, mysql_real_escape_string, removeslashes etc.

Hat jemand eine Idee, wie Dateiinhalt zu entkommen?

Vielen Dank,

War es hilfreich?

Lösung

Ich habe vor die folgende Sequenz verwendet, die gut zu funktionieren scheint, und werden alle Daten in die db speichern, einschließlich Bilder, PDF-Dateien, Daten-Arrays, etc ...:)

Speichern der Daten (kann eine Zeichenfolge, Array, ein Objekt, etc.);

Schalten Sie zuerst die Daten in eine Base64-codierte Zeichenfolge

$strData = strtr(
             base64_encode(
               addslashes(
                 gzcompress( serialize($dataToStore) , 9)
                 )
               ) , '+/=', '-_,');

Dann speichern, die String-Daten in der db ...


Abrufen der Daten;

die Zeichenfolge Daten aus dem DB Extract

dekodieren die Daten zurück zu dem, was Sie wollen (Sie benötigen einen zusätzlichen Schritt nach je nach Eingangsdaten, Array, Bild auszuführen, etc.)

$returnData = unserialize(
                gzuncompress(
                  stripslashes(
                    base64_decode(
                      strtr($strDataFromDb, '-_,', '+/=')
                    )
                  )
                )
              );

Das ist mir sicherlich dazu beigetragen, zu speichern, was ich in einer mySQL db speichern benötigt!

Andere Tipps

Ich sehe nicht, warum Sie eine Datei in einer Datenbank speichern möchten, aber ich schlage vor, Sie nehmen einen Blick auf Prepared Statements .

Vermutung: Sie Fehler aufgrund der Inkompatibilität zwischen Zeichensätzen werden zu stoßen. PDF ist wahrscheinlich eine binäre Datei, so dass Sie sicherstellen müssen, dass db Spalte eingerichtet ist, zu handhaben es so.

Neben dem entweichenden Problem, das Sie in „Paket zu groß“ laufen möglicherweise Fehler, wenn der (MySQL) Systemvariable max_allowed_packet auf einen gesetzt "kleinen" Wert.
Mit Hilfe der mysqli-Erweiterung, vorbereitete Anweisungen und mysqli_stmt :: send_long_data können Sie vermeidet beiden Probleme.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top