sql >> データベース >  >> RDS >> Mysql

Wordpress-blobデータとして保存されたdbから画像を取得する

    すべてを取得しています その製品IDのテーブル内の情報、およびそれを画像として表示しようとしています。結果の配列または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サイズの制限

    MYSQLのBLOBは64kbに制限されていることに注意してください。画像がこれよりも大きい場合は、16MBのMEDIUMBLOBを使用する必要があります

    データベースに直接ではなく、画像パスをBLOBとして保存します

    より実用的な解決策は、パスだけを保存することです。

    これを行うには、画像をアップロードするフォルダを作成する必要があります(たとえば、以下の私のコードでは、Webルートにあり、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. WooCommerce製品は、実際には在庫切れではないのに「在庫切れ」というメッセージを表示します

    2. Datamapperのdm_mysql_adaptergemはWindowsでサポートされていますか?

    3. さまざまな表のデータを最初のデータ行の列名とともに動的に表示するPL/SQLプロシージャ/関数

    4. 大きなMySQLテーブル