Bạn đang nhận được tất cả thông tin trong bảng cho id sản phẩm đó, và sau đó cố gắng hiển thị nó dưới dạng hình ảnh. Bạn cần truy cập hình ảnh từ mảng kết quả hoặc SELECT
chỉ là hình ảnh, ví dụ:sử dụng get_var
thay vì get_results
và chọn img
thay vì *
:
$product_id = get_query_var('id');
$image = $wpdb->get_var("SELECT img FROM products WHERE id = ".$product_id);
Nhân tiện, điều này khiến bạn mở cửa với SQL injection, vì vậy bạn thực sự nên sử dụng $wpdb->prepare
để bao gồm một biến trong truy vấn của bạn, ví dụ:
$image = $wpdb->get_var(
$wpdb->prepare("SELECT img FROM products WHERE id = %d", $product_id)
);
Giới hạn kích thước BLOB
Lưu ý rằng BLOB trong MYSQL được giới hạn ở 64kb. Nếu hình ảnh của bạn lớn hơn mức này, bạn sẽ cần sử dụng MEDIUMBLOB là 16MB
Lưu đường dẫn hình ảnh thay vì trực tiếp trong cơ sở dữ liệu dưới dạng BLOB
Một giải pháp thiết thực hơn là chỉ lưu đường dẫn.
Để thực hiện việc này, bạn sẽ cần tạo một thư mục để tải hình ảnh lên (ví dụ:trong mã của tôi bên dưới, nó nằm trong thư mục gốc của web và được gọi là myimages
) và một cột VARCHAR hoặc TEXT mới trong cơ sở dữ liệu của bạn (nó được gọi là img_path
trong ví dụ bên dưới).
/* 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.";
}
Để truy xuất hình ảnh từ cơ sở dữ liệu và hiển thị nó:
$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.'" />';
Đoạn mã trên chưa được kiểm tra, nhưng ý tưởng cơ bản là ở đó. Ngoài ra, nó sẽ không hoạt động nếu một tệp có cùng tên đã tồn tại, vì vậy bạn có thể muốn xem xét thêm dấu thời gian vào tên để làm cho nó trở thành duy nhất.
Tham khảo :