Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wordpress - pobieranie obrazów z bazy danych przechowywanych jako dane blob

Otrzymujesz wszystko informacje w tabeli dla tego identyfikatora produktu, a następnie spróbuj wyświetlić go jako obraz. Musisz uzyskać dostęp do obrazu z tablicy wyników lub SELECT tylko obraz np. użyj get_var zamiast get_results i wybierz img zamiast * :

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

Nawiasem mówiąc, to otwiera cię na wstrzyknięcie SQL, więc naprawdę powinieneś użyć $wpdb->prepare aby uwzględnić w zapytaniu zmienną, np.

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

Ograniczenie rozmiaru BLOB

Zauważ, że BLOB w MYSQL jest ograniczony do 64kb. Jeśli twoje obrazy są większe niż ten, musisz użyć MEDIUMBLOB, który ma 16 MB

Zapisz ścieżkę obrazu zamiast bezpośrednio w bazie danych jako BLOB

Bardziej praktycznym rozwiązaniem jest zapisanie samej ścieżki.

Aby to zrobić, musisz utworzyć folder, do którego będą przesyłane obrazy (np. w moim kodzie poniżej, znajduje się w katalogu głównym sieci i nazywa się myimages ) oraz nową kolumnę VARCHAR lub TEXT w Twojej bazie danych (o nazwie img_path w poniższym przykładzie).

/* 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.";
}

Aby pobrać obraz z bazy danych i wyświetlić go:

$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.'" />';

Powyższy kod nie został przetestowany, ale istnieje podstawowa idea. Ponadto nie będzie działać, jeśli plik o tej samej nazwie już istnieje, więc warto rozważyć dodanie znacznika czasu do nazwy, aby była unikalna.

Odniesienie :




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Laravel SQLSTATE[23000]:Naruszenie ograniczenia integralności:1452 Nie można dodać ani zaktualizować wiersza podrzędnego

  2. MySQL - zmień OR na AND

  3. Jak zmienić zduplikowane wiersze na unikalne wartości w mysql?

  4. Tablica danych Chart.js przy użyciu PHP, MySQL. Jak zdefiniować źródło danych z tablicy JSON?

  5. PHP, odśwież stronę we wstawce