Remote-image-Datei auf sqlite-blob in PHP?
Habe ich eine image-Datei auf einem Remoteserver gespeichert. Ich habe nur HTTP-Zugriff auf den server, so dass ich immer bin seinen Inhalt mit file_get_contents(URL)
Brauche ich, um zu speichern, diese Inhalte in eine lokale sqlite3 Datenbank in ein Feld vom Typ 'blob'. Ich bin mit dem PDO-Objekt eine Verbindung zur Datenbank herstellen, und ich bin mit
$db->exec("INSERT INTO myTable (myImageBlob) VALUES
('".file_get_contents($filePath)."')")
hinzufügen von Daten zur Datenbank.
Funktioniert das nicht. Entschuldigt, wenn ich eine wirklich noobish Fehler. Wir alle müssen lernen, irgendwie...
Aus Gründen, die ich nicht vertiefen, es ist nicht eine Möglichkeit für mich, um das Bild zu speichern lokal und setzen Sie die URL in der Datenbank. Es /wurde/werden gespeichert in einem blob.
- Verwenden Sie immer parametrisierte Abfragen, wenn Sie verwenden sqlite, drei Vorteile. 1. Viel schneller (weniger Parsen von sql-Anweisungen erforderlich, die von der db). 2. Keine sql-injection. 3. Keine Probleme, wenn dein string enthält a ' oder a ".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Verkettung von Daten, die Sie haben keine Kontrolle über die in einer SQL-Anweisung ist eine sehr schlechte Idee. Zum Beispiel die Bild-Daten enthalten ein Anführungszeichen beendet den string oder einen umgekehrten Schrägstrich, die interpretiert wird als ein steuerzeichen. Schlechteste jemand bauen könnte, ein fake-Bild injiziert bösartigen SQL-code in Ihrer Anwendung.
Ich schlage vor, Sie verwenden Sie eine vorbereitete Anweisung statt:
Beachten Sie, dass durch das übergeben von PDO::PARAM_LOB zu bindParam() fügen Sie die blob-Daten aus einem stream. Das ist, warum ich bin mit fopen() anstelle von file_get_contents()
fclose
?Tun Sie es nicht. Jedes mal, wenn Sie einfügen von binären Daten in einer Datenbank, Gott tötet ein Kätzchen.
Stattdessen speichern Sie das Bild irgendwo im Dateisystem, und speichern Sie die Pfad in deiner db.
Daran zu denken, das Kätzchen!