Apabila perlu menyimpan imej dalam pangkalan data MySQL, seseorang mungkin menghadapi kesukaran. Berikut ialah struktur jadual:
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)
Pertanyaan berikut cuba memasukkan imej, tetapi gagal menyimpan data binari yang dijangkakan:
$tmp_img = $this->image['tmp_name']; $sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','file_get_contents($tmp_image)')"; mysql_query($sql);
Isunya terletak pada gabungan fungsi panggil file_get_contents($tmp_image) di dalam rentetan. Interpolasi pembolehubah PHP hanya berfungsi untuk pembolehubah, bukan panggilan fungsi. Berikut ialah tiga penyelesaian:
Penyelesaian 1: Gunakan penggabungan eksplisit:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . file_get_contents($tmp_image) . "')";
Penyelesaian 2: Bersihkan data binari untuk pertanyaan MySQL:
$sql = "INSERT INTO ImageStore(ImageId,Image) VALUES('$this->image_id','" . mysql_escape_string(file_get_contents($tmp_image)) . "')";
Nota: Lebih suka tidak menyimpan imej besar dalam pangkalan data MySQL jika boleh.
Atas ialah kandungan terperinci Bagaimana untuk Memasukkan Gumpalan Imej dengan betul ke dalam MySQL Menggunakan PHP?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!