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

Fügen Sie Blobs in MySql-Datenbanken mit PHP ein

Problem

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','file_get_contents($tmp_image)')";

Dadurch wird in PHP ein String mit dem Namen $sql erstellt . Vergessen Sie MySQL für eine Minute, da Sie noch keine Abfrage ausführen. Du baust nur eine Zeichenfolge auf.

Die Magie von PHP bedeutet, dass Sie einen Variablennamen schreiben können – sagen wir, $this->image_idinnen die doppelten Anführungszeichen und die Variable wird immer noch magisch erweitert.

Diese als "Variableninterpolation" bezeichnete Funktionalität tritt bei Funktionsaufrufen nicht auf. Alles, was Sie hier tun, ist also, den String "file_get_contents($tmp_image)" zu schreiben in die Datenbank.

Lösung (1)

Also, um das Ergebnis des Aufrufs von file_get_contents($tmp_image) zu verketten , müssen Sie aus der Zeichenfolge springen und Dinge explizit tun:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";

(Sie können sogar nur an der Syntaxhervorhebung sehen, wie das funktioniert hat.)

Lösung (2)

Jetzt haben Sie das Problem, dass, wenn die Binärdaten ' enthalten , Ihre Abfrage ist ungültig. Sie sollten es also über mysql_escape_string ausführen um es für den Abfragevorgang zu bereinigen:

$sql = "INSERT INTO ImageStore(ImageId,Image)
        VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";

Lösung (3)

Jetzt haben Sie ein wirklich große Zeichenfolge, und Ihre Datenbank wird sperrig.

Speichern Sie lieber nicht Bilder in Datenbanken , wo Sie ihm helfen können.