Mysql
 sql >> база данни >  >> RDS >> Mysql

Wordpress - получаване на изображения от db, съхранени като blob данни

Получавате всичко информация в таблицата за този идентификатор на продукта и след това се опитвате да го покажете като изображение. Трябва да получите достъп до изображението от масива с резултати или SELECT само изображението напр. използвайте get_var вместо get_results и изберете img вместо * :

$product_id = get_query_var('id');
$image = $wpdb->get_var("SELECT img FROM products  WHERE id = ".$product_id);

Между другото, това ви оставя отворени за SQL инжектиране, така че наистина трябва да използвате $wpdb->prepare за да включите променлива във вашата заявка, напр.

$image = $wpdb->get_var( 
    $wpdb->prepare("SELECT img FROM products  WHERE id = %d", $product_id)  
);

Ограничение на размера на BLOB

Имайте предвид, че BLOB в MYSQL е ограничен до 64kb. Ако вашите изображения са по-големи от това, ще трябва да използвате MEDIUMBLOB, който е 16MB

Запазете пътя на изображението вместо директно в базата данни като BLOB

По-практично решение е да запазите само пътя.

За да направите това, ще трябва да създадете папка, в която да качите изображенията (напр. в моя код по-долу тя е в корена на мрежата и се нарича myimages ) и нова колона VARCHAR или TEXT във вашата база данни (нарича се img_path в примера по-долу).

/* 1. Define the path to the folder where you will upload the images to, 
      Note, this is relative to your web root. */ 
define (MY_UPLOAD_DIR, "myimages/");

$imagefilename = basename( $_FILES['image']['name']);

/* 2. define the full path to upload the file to, including the file name */
$fulluploadpath = get_home_path(). MY_UPLOAD_DIR . $imagefilename;

$image_name = strip_tags($_FILES['image']['name']);
$image_size = getimagesize($_FILES['image']['tmp_name']);

/* 3. Do your validation checks here, e.g. */
if($image_size == FALSE) {
    echo 'The image was not uploaded';
} 
/* 4. if everything is ok, copy the temp file to your upload folder */
else if(move_uploaded_file($_FILES['image']['tmp_name'], $fulluploadpath )) {
    /* 5. if the file was moved successfully, update the database */
    $wpdb->insert( 
        $table, 
        array( 
            'title' => $title,
            'description' => $description,
            'brand' => $brand,
            'img_name' => $image_name,
            'img_path' => MY_UPLOAD_DIR . $imagefilename, /* save the path instead of the image */
        )
    ); 

} else {
    //Display an error if the upload failed
    echo "Sorry, there was a problem uploading your file.";
}

За да извлечете изображението от базата данни и да го покажете:

$product_id = get_query_var('id');
/* query the database for the image path */
$imagepath = $wpdb->get_var( 
    $wpdb->prepare("SELECT img_path FROM products  WHERE id = %d", $product_id)  
);

/* 6. Display the image using the path. 
      Because the path we used is relative to the web root, we can use it directly 
      by prefixing it with `/` so it starts at the webroot */ 
if ($imagepath)
    echo '<img src="/'.$imagepath.'" />';

Кодът по-горе не е тестван, но основната идея е там. Освен това няма да работи, ако вече съществува файл със същото име, така че може да помислите за добавяне на времева клеймо към името, за да го направите уникално.

Реф. :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Как да изчислим процентното увеличение от предишния ред/ден след комплекса Group By?

  2. Разбор на данни в таблици

  3. Заявката конкатенира всичко в един ред, а не в отделни редове

  4. Как да формулираме заявка, за да покажем всички курсове, взети от дадено лице

  5. Използване на SSIS за заявка на ADO .NET изходна заявка, преминаваща в параметри от SQL Server