Reputation: 18398
The below code seems like it should work; however, the blob in the database only contains 0 after the function is run. Does the below code look accurate? If not how can I fix it?
$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'");
Thank :)!
Upvotes: 0
Views: 1242
Reputation: 23749
You would probably want to send the blob/picture data to your DB as hex, as it is the most efficient method:
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'");
}
note the x'".bin2hex($thumbData)."'
the x
marks the contents of the string as hex.
Please note:
There is a lot of debate about if it is a good idea to store images in the Database or not. The general consensus is that it is a bad idea, except when:
In all other cases, store the image on disk and store the location of said image in your database.
Upvotes: 1
Reputation: 449385
You definitely need to add quotes; and then I guess you would have to mysql_real_escape_string()
the whole thumbnail code.
$thumbnail = mysql_real_escape_string($thumbnail);
$wpdb->query("UPDATE ".$wpdb->prefix."items SET picture = '$thumbnail' WHERE
id='$id'");
Upvotes: 1