sql >> Databáze >  >> RDS >> Mysql

Wordpress – získávání obrázků z db uložených jako data blob

Získáváte vše informace v tabulce pro dané ID produktu a poté se pokusit je zobrazit jako obrázek. K obrázku musíte přistupovat z pole výsledků nebo SELECT jen obrázek např. použijte get_var místo get_results a vyberte img místo * :

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

To vám mimochodem ponechává otevřenou aplikaci SQL injection, takže byste opravdu měli použít $wpdb->prepare chcete-li do dotazu zahrnout proměnnou, např.

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

Omezení velikosti BLOB

Všimněte si, že BLOB v MYSQL je omezen na 64 kb. Pokud jsou vaše obrázky větší než toto, budete muset použít MEDIUMBLOB, který má 16 MB

Uložte cestu k obrázku místo přímo v databázi jako objekt BLOB

Praktičtějším řešením je uložit pouze cestu.

Chcete-li to provést, budete muset vytvořit složku, do které budete obrázky nahrát (např. v mém níže uvedeném kódu, v kořenovém adresáři webu a nazývá se myimages ) a nový sloupec VARCHAR nebo TEXT ve vaší databázi (nazývá se img_path v příkladu níže).

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

Chcete-li získat obrázek z databáze a zobrazit jej:

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

Výše uvedený kód není otestován, ale základní myšlenka existuje. Také to nebude fungovat, pokud soubor se stejným názvem již existuje, takže možná budete chtít zvážit přidání časového razítka k názvu, aby byl jedinečný.

Odkaz :




  1. Dotaz MySQL k nalezení přátel a počtu společných přátel

  2. vložit jednu sadu dat vícekrát mysql

  3. sémantika CHAR a ORA-01461

  4. Přidejte sloupec, který představuje zřetězení dvou dalších sloupců Varchar