當需要在 MySQL 資料庫中儲存映像時,可能會遇到困難。表結構如下:
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)
以下查詢嘗試插入映像,但無法儲存預期的二進位資料:
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; mysql_query($sql);
問題在於函數的串聯在字串內調用file_get_contents($tmp_image ) 。 PHP 的變數插值僅適用於變量,不適用於函數呼叫。以下是三種解決方案:
解決方案1: 使用明確串聯:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
解決方案2: 清理MySQL 查詢的二進位資料:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
注意:如果可能的話,最好不要將大圖像儲存在 MySQL 資料庫中。
以上是如何使用 PHP 正確地將映像 Blob 插入 MySQL?的詳細內容。更多資訊請關注PHP中文網其他相關文章!