すべてを取得しています その製品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.'" />';
上記のコードはテストされていませんが、基本的な考え方はそこにあります。また、同じ名前のファイルがすでに存在する場合は機能しないため、名前にタイムスタンプを追加して一意にすることを検討することをお勧めします。
参照 :