views:

28

answers:

2

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 :)!

+1  A: 

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'");
Pekka
+1  A: 

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:

  1. Your images are less than 2MB in size
  2. You intend to store no more tan 1GB in total (and even at 1GB you are stretching it).

In all other cases, store the image on disk and store the location of said image in your database.

Jacco
There were a few things wrong... pekka was also right, but I accepted yours since you changed more things in my code.. I agree. I dont think more than 5 megs is gonna be stored. So far each picture is 1kb or less.
Parris
"There were a few things wrong" please specify what was wrong.
Jacco