Wenn ein Bild in einer MySQL-Datenbank gespeichert werden muss, kann es zu Schwierigkeiten kommen. Hier ist die Tabellenstruktur:
mysql> describe ImageStore; +---------+----------+------+-----+---------+-------+ | Field | Type | Null | Key | Default | Extra | +---------+----------+------+-----+---------+-------+ | ImageId | int(11) | NO | PRI | NULL | | | Image | longblob | NO | | NULL | | +---------+----------+------+-----+---------+-------+ 2 rows in set (0.01 sec)
Die folgende Abfrage versucht, ein Bild einzufügen, speichert jedoch nicht die erwarteten Binärdaten:
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; mysql_query($sql);
Das Problem liegt in der Verkettung der Funktion Rufen Sie file_get_contents($tmp_image) innerhalb der Zeichenfolge auf. Die Variableninterpolation von PHP funktioniert nur für Variablen, nicht für Funktionsaufrufe. Hier sind drei Lösungen:
Lösung 1:Explizite Verkettung verwenden:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
Lösung 2:Binärdaten für MySQL-Abfrage bereinigen:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Hinweis: Speichern Sie große Bilder lieber nicht in MySQL Datenbanken wenn möglich.
Das obige ist der detaillierte Inhalt vonWie füge ich Bild-Blobs mit PHP ordnungsgemäß in MySQL ein?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!