以下代码似乎应该有效;但是,数据库中的blob在运行函数后仅包含0。以下代码看起来准确吗?如果没有,我该如何解决?
$tmpName = $_FILES['picture']['tmp_name'];
$fp = fopen($tmpName, 'r');
$binary = fread($fp, filesize($tmpName));
fclose($fp);
$originalImage = imagecreatefromstring($binary);
$tempImage = imagecreate(100,100);
imagecopyresized($tempImage,$originalImage,0,0,0,0,100,100);
ob_start();
imageJPEG($tempImage);
$thumbnail = ob_get_contents();
ob_end_clean();
$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = $thumbnail WHERE id=$id'");
谢谢:))
答案 0 :(得分:1)
你肯定需要添加引号;然后我猜你必须mysql_real_escape_string()
整个缩略图代码。
$thumbnail = mysql_real_escape_string($thumbnail);
$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = '$thumbnail' WHERE
id='$id'");
答案 1 :(得分:1)
您可能希望将blob /图片数据作为十六进制发送到数据库,因为这是最有效的方法:
if ( is_uploaded_file($_FILES['picture']['tmp_name']) ) {
$originalImage = imagecreatefromjpeg($_FILES['picture']['tmp_name']);
$thumbImage = imagecreatetruecolor(100, 100);
imagecopyresized($thumbImage, $originalImage, 0, 0, 0, 0, 100,100);
imagedestroy($originalImage); // Free the memory as soon as possible
ob_start();
imagejpeg( $thumbImage, NULL, JPEG_QUALITY);
$thumbData = ob_get_contents();
ob_end_clean();
imagedestroy($thumbImage);
$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = x'".bin2hex($thumbData)."' WHERE id=$id'");
}
请注意x'".bin2hex($thumbData)."'
x
将字符串的内容标记为十六进制。
请注意:
关于将图像存储在数据库中是否是一个好主意存在很多争论。普遍的共识是,这是一个坏主意,除非:
在所有其他情况下,将图像存储在磁盘上并将所述图像的位置存储在数据库中。