Cách sử dụng Kiểu dữ liệu MySQL BLOB để lưu trữ image bằng PHP trên Ubuntu 18.04
Cách sử dụng Kiểu dữ liệu MySQL BLOB để lưu trữ image bằng PHP trên Ubuntu 18.04
BLOB là kiểu dữ liệu MySQL có thể lưu trữ dữ liệu binary như hình ảnh, file đa phương tiện và file PDF.
Khi tạo những ứng dụng nhu yếu database phối hợp ngặt nghèo, trong đó hình ảnh phải được đồng điệu với dữ liệu tương quan ( ví dụ : cổng thông tin nhân viên cấp dưới, database sinh viên hoặc ứng dụng kinh tế tài chính ), bạn hoàn toàn có thể thấy thuận tiện khi tàng trữ hình ảnh như hộ chiếu của sinh viên ảnh và chữ ký trong database MySQL cùng với những thông tin tương quan khác .
Đây là nơi xuất hiện kiểu dữ liệu MySQL BLOB
. Phương pháp lập trình này loại bỏ nhu cầu tạo một hệ thống file riêng để lưu trữ hình ảnh. Lược đồ cũng tập trung hóa database, làm cho nó dễ di động và an toàn hơn vì dữ liệu được tách biệt khỏi hệ thống file. Tạo bản backup cũng liền mạch hơn vì bạn có thể tạo một file kết xuất MySQL duy nhất chứa tất cả dữ liệu .
Truy xuất dữ liệu nhanh hơn và khi tạo bản ghi, bạn có thể chắc chắn rằng các-luật xác thực dữ liệu và tính toàn vẹn tham chiếu được duy trì, đặc biệt khi sử dụng các giao dịch MySQL .
Trong hướng dẫn này, bạn sẽ sử dụng kiểu dữ liệu MySQL
BLOB
để lưu trữ hình ảnh bằng PHP trên Ubuntu 18.04.Yêu cầu
Để làm theo hướng dẫn này, bạn cần những thành phần sau :
- Server Ubuntu 18.04 được cấu hình bằng Cài đặt server ban đầu với Ubuntu 18.04 và user không phải root có quyền
sudo
.- Apache, MySQL và PHP được cài đặt theo hướng dẫn về Cách cài đặt Linux, Apache, MySQL, PHP (LAMP) trên Ubuntu 18.04. Đối với hướng dẫn này, không cần thiết phải tạo VirtualHost, vì vậy bạn có thể bỏ qua Bước 4.
Bước 1 – Tạo database
Bạn sẽ khởi đầu bằng cách tạo một database mẫu cho dự án Bất Động Sản của bạn. Để thực thi việc này, hãy SSH vào server và sau đó chạy lệnh sau để đăng nhập vào server MySQL của bạn với quyền root :
- sudo mysql -u root -p
Nhập password root của database MySQL của bạn và nhấn
ENTER
để tiếp tục.Sau đó, chạy lệnh sau để tạo database. Trong hướng dẫn này, ta sẽ đặt tên là
test_company
:
- CREATE DATABASE test_company;
Khi database được tạo, bạn sẽ thấy tác dụng sau :
Output
Query OK, 1 row affected (0.01 sec)
Tiếp theo, tạo account
test_user
trên server MySQL và nhớ thay thếPASSWORD
bằng một password mạnh:
- CREATE USER ‘test_user’@’localhost’ IDENTIFIED BY ‘PASSWORD’;
Bạn sẽ thấy hiệu quả sau :
Output
Query OK, 0 rows affected (0.01 sec)
Để cấp cho
test_user
đầy đủ các quyền trên databasetest_company
, hãy chạy:
- GRANT ALL PRIVILEGES ON test_company.* TO ‘test_user’@’localhost’;
Đảm bảo bạn nhận được hiệu quả sau :
Output
Query OK, 0 rows affected (0.01 sec)
Cuối cùng, xóa bảng quyền để MySQL reload những quyền :
- FLUSH PRIVILEGES;
Đảm bảo bạn thấy hiệu quả sau :
Output
Query OK, 0 rows affected (0.01 sec)
Bây giờ database
test_company
vàtest_user
đã sẵn sàng, bạn sẽ chuyển sang tạo bảngproducts
để lưu trữ các sản phẩm mẫu. Bạn sẽ sử dụng bảng này sau đó để chèn và truy xuất các bản ghi để chứng minh cách MySQLBLOB
hoạt động.Đăng xuất khỏi server MySQL :
- QUIT;
Sau đó, đăng nhập lại bằng thông tin đăng nhập của
test_user
mà bạn đã tạo:
- mysql -u test_user -p
Khi được yêu cầu, hãy nhập password cho
test_user
và nhấnENTER
để tiếp tục. Tiếp theo, chuyển sang databasetest_company
bằng lệnh như sau:
- USE test_company;
Khi database
test_company
được chọn, MySQL sẽ hiển thị:Output
Database changed
Tiếp theo, tạo bảng
products
bằng lệnh:
- CREATE TABLE `products` (product_id BIGINT PRIMARY KEY AUTO_INCREMENT, product_name VARCHAR(50), price DOUBLE, product_image BLOB) ENGINE = InnoDB;
Lệnh này tạo một bảng có tên là
products
. Bảng có bốn cột:
product_id
: Cột này sử dụng kiểu dữ liệuBIGINT
để chứa một danh sách lớn các sản phẩm lên đến tối đa 2⁶³-1 mục. Bạn đã đánh dấu cột làPRIMARY KEY
để xác định duy nhất các sản phẩm. Để MySQL xử lý việc tạo số nhận dạng mới cho các cột được chèn, bạn đã sử dụng từ khóaAUTO_INCREMENT
.
product_name
: Cột này chứa tên của các sản phẩm. Bạn đã sử dụng kiểu dữ liệuVARCHAR
vì trường này thường sẽ xử lý chữ và số lên đến tối đa50
ký tự — giới hạn50
chỉ là giá trị giả định được sử dụng cho mục đích của hướng dẫn này.
price
: Đối với mục đích demo, bảngproducts
của bạn chứa cộtprice
để lưu trữ giá bán lẻ của sản phẩm. Vì một số sản phẩm có thể có giá trị động (ví dụ: 23,69, 45,36, 102,99), bạn đã sử dụng kiểu dữ liệuDOUBLE
.
product_image
: Cột này sử dụng kiểu dữ liệuBLOB
để lưu trữ dữ liệu binary thực của hình ảnh sản phẩm.Bạn đã sử dụng
InnoDB
lưu trữENGINE
cho bảng để hỗ trợ một loạt các tính năng bao gồm các giao dịch MySQL. Sau khi thực hiện điều này để tạo bảngproducts
, bạn sẽ thấy kết quả sau:Output
Query OK, 0 rows affected (0.03 sec)
Đăng xuất khỏi server MySQL của bạn :
- QUIT;
Bạn sẽ nhận được hiệu quả sau
Output
Bye
Bảng
products
hiện đã sẵn sàng để lưu trữ một số bản ghi bao gồm hình ảnh của sản phẩm và bạn sẽ điền vào bảng này với một số sản phẩm trong bước tiếp theo.Bước 2 – Tạo tập lệnh PHP để kết nối database
Trong bước này, bạn sẽ tạo một tập lệnh PHP sẽ kết nối với database MySQL mà bạn đã tạo ở Bước 1. Tập lệnh sẽ chuẩn bị ba sản phẩm mẫu và chèn chúng vào bảng
products
.Để tạo mã PHP, hãy mở một file mới bằng editor:
Xem thêm: 7 phương pháp dạy học tiếng việt theo hướng phát triển năng lực hiệu quả – https://thomaygiat.com
- sudo nano /var/www/html/config.php
Sau đó, nhập thông tin sau vào file và thay thế
PASSWORD
bằng passwordtest_user
mà bạn đã tạo ở Bước 1:/ var / www / html / config.php
test_company'); define('DB_USER', 'test_user'); define('DB_PASSWORD', 'PASSWORD'); define('DB_HOST', 'localhost'); $pdo = new PDO("mysql:host=". DB_HOST. "; dbname=". DB_NAME, DB_USER, DB_PASSWORD); $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
Lưu file .
Trong file này, bạn đã sử dụng bốn hằng số PHP để liên kết với database MySQL mà bạn đã tạo ở Bước 1 :
DB_NAME
: Hằng số này giữ tên của databasetest_company
.
DB_USER
: Biến này chứa tên usertest_user
.
DB_PASSWORD
: Hằng số này lưu trữPASSWORD
MySQL của accounttest_user
.
DB_HOST
: server nơi chứa database. Trong trường hợp này, bạn đang sử dụng serverlocalhost
.Dòng sau trong file khởi tạo Đối tượng dữ liệu PHP ( PDO ) và liên kết với database MySQL :
... $pdo = new PDO("mysql:host=". DB_HOST. "; dbname=". DB_NAME, DB_USER, DB_PASSWORD); ...
Ở cuối file, bạn đã đặt một số ít thuộc tính PDO :
ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION
: Thuộc tính này hướng dẫn PDO xuất một ngoại lệ có thể được ghi lại cho mục đích gỡ lỗi.ATTR_EMULATE_PREPARES, false
: Tùy chọn này tăng tính bảo mật bằng cách yêu cầu công cụ database MySQL thực hiện chuẩn bị thay vì PDO.Sẽ bao gồm file
/var/www/html/config.php
trong hai tập lệnh PHP mà bạn sẽ tạo tiếp theo để chèn và truy xuất các bản ghi tương ứng.Đầu tiên, hãy tạo tập lệnh PHP
/var/www/html/insert_products.php
để chèn các bản ghi vào bảng sản phẩm:
- sudo nano /var/www/html/insert_products.php
Sau đó, thêm thông tin sau vào file
/var/www/html/insert_products.php
:/ var / www / html / insert_products. php
'VIRTUAL SERVERS', 'price' => 5, 'product_image' => file_get_contents("https://i.imgur.com/VEIKbp0.png") ]; $products[] = [ 'product_name' => 'MANAGED KUBERNETES', 'price' => 30, 'product_image' => file_get_contents("https://i.imgur.com/cCc9Gw9.png") ]; $products[] = [ 'product_name' => 'MySQL DATABASES', 'price' => 15, 'product_image' => file_get_contents("https://i.imgur.com/UYcHkKD.png" ) ]; $sql = "INSERT INTO products(product_name, price, product_image) VALUES (:product_name, :price, :product_image)"; foreach ($products as $product) { $stmt = $pdo->prepare($sql); $stmt->execute($product); } echo "Records inserted successfully";
Lưu file .
Trong file, bạn đã bao gồm file
config.php
ở trên cùng. Đây là file đầu tiên bạn tạo để xác định các biến database và kết nối với database. Tệp cũng khởi tạo một đối tượng PDO và lưu trữ nó trong một biến$pdo
.Tiếp theo, bạn đã tạo một mảng dữ liệu của các sản phẩm để chèn vào database. Ngoài
product_name
vàprice
, được chuẩn bị dưới dạng chuỗi và giá trị số tương ứng, tập lệnh sử dụng hàmfile_get_contents
được tích hợp sẵn của PHP để đọc hình ảnh từ nguồn bên ngoài và chuyển chúng dưới dạng chuỗi vào cộtproduct_image
.Tiếp theo, bạn đã chuẩn bị một câu lệnh SQL và sử dụng câu lệnh PHP
foreach{...}
để chèn từng sản phẩm vào database .Để thực thi file
/var/www/html/insert_products.php
, hãy chạy nó trong cửa sổ trình duyệt của bạn bằng cách sử dụng URL sau. Hãy nhớ thay thếyour-server-IP
công cộng của server:http://your-server-IP/insert_products.php
Sau khi thực thi file, bạn sẽ thấy thông tin thành công xuất sắc trong trình duyệt xác nhận những bản ghi đã được chèn vào database .
Bạn đã chèn thành công ba bản ghi có chứa hình ảnh sản phẩm vào bảng
products
. Trong bước tiếp theo, bạn sẽ tạo một tập lệnh PHP để lấy các bản ghi này và hiển thị chúng trong trình duyệt của bạn.Bước 3 – Hiển thị thông tin sản phẩm từ database MySQL
Với thông tin và hình ảnh của mẫu sản phẩm trong database, giờ đây bạn sẽ viết mã một tập lệnh PHP khác để truy vấn và hiển thị thông tin của loại sản phẩm trong bảng HTML trên trình duyệt của bạn .
Để tạo file, hãy nhập như sau :
- sudo nano /var/www/html/display_products.php
Sau đó, nhập thông tin sau vào file :
/ var / www / html / display_products. phpprepare($sql); $stmt->execute(); ?>
Products Database fetch(PDO::FETCH_ASSOC)) { echo ' Product Id Product Name Price Product Image '; echo ' '; } ?>'. $row['product_id']. ' '; echo ''. $row['product_name']. ' '; echo ''. $row['price']. ' '; echo ''. ' ' . ' '; echo 'Lưu những đổi khác vào file và đóng nó .
Ở đây, bạn đã bao gồm file
config.php
để kết nối với database. Sau đó, bạn đã chuẩn bị và thực hiện một câu lệnh SQL bằng cách sử dụng PDO để truy xuất tất cả các mục từ bảngproducts
bằngSELECT * FROM products
.Tiếp theo, bạn đã tạo một bảng HTML và điền nó với dữ liệu của các sản phẩm bằng cách sử dụng câu lệnh
while() {...}
PHP. Dòng$row = $stmt->fetch(PDO::FETCH_ASSOC)
truy vấn database và lưu trữ kết quả trong biến$row
dưới dạng một mảng đa chiều, sau đó bạn đã hiển thị trong cột bảng HTML bằng cách sử dụng$row['column_name']
cú pháp$row['column_name']
.Hình ảnh từ cột
product_image
được đặt bên trong. Bạn đã sử dụng thuộc tính
width
vàheight
để thay đổi kích thước hình ảnh thành kích thước nhỏ hơn có thể vừa với cột bảng HTML.Để chuyển đổi dữ liệu được lưu giữ bởi kiểu dữ liệu
BLOB
trở lại hình ảnh, bạn đã sử dụng hàmbase64_encode
PHP và cú pháp sau cho lược đồ URI dữ liệu :data:media_type;base64, base_64_encoded_data
Trong trường hợp này,
image/png
làmedia_type
và chuỗi được mã hóaBase64
từ cộtproduct_image
làbase_64_encoded_data
.Tiếp theo, thực thi file
display_products.php
trong trình duyệt web bằng lệnh địa chỉ sau:http://your-server-IP/display_products.php
Sau khi chạy file
display_products.php
trong trình duyệt, bạn sẽ thấy một bảng HTML với danh sách các sản phẩm và hình ảnh liên quan.Điều này xác nhận tập lệnh PHP để lấy hình ảnh từ MySQL đang hoạt động giải trí như mong đợi .
Kết luận
Trong hướng dẫn này, bạn đã sử dụng kiểu dữ liệu MySQL
BLOB
để lưu trữ và hiển thị hình ảnh bằng PHP trên Ubuntu 18.04. Bạn cũng đã thấy những ưu điểm cơ bản của việc lưu trữ hình ảnh trong database thay vì lưu trữ chúng trong hệ thống file. Chúng bao gồm tính di động, bảo mật và dễ dàng backup. Nếu bạn đang xây dựng một ứng dụng như cổng thông tin sinh viên hoặc database của nhân viên yêu cầu thông tin và hình ảnh liên quan được lưu trữ cùng nhau, thì công nghệ này có thể hữu ích cho bạn.Để biết thêm thông tin về các kiểu dữ liệu được hỗ trợ trong MySQL, hãy làm theo hướng dẫn Kiểu dữ liệu MySQL. Nếu bạn quan tâm đến nội dung khác liên quan đến MySQL và PHP, hãy xem các hướng dẫn sau:
Các tin liên quan
Cách đặt lại mật khẩu gốc MySQL hoặc MariaDB của bạn
2020-05-05
Cách cài đặt MySQL trên Ubuntu 18.04
2020-04-21
Cách cài đặt MySQL trên CentOS 8
2020-03-18
Cách triển khai phân trang trong MySQL với PHP trên Ubuntu 18.04
2020-01-29
Cách tối ưu hóa truy vấn MySQL với bộ đệm ProxySQL trên Ubuntu 16.04
2019-12-30
Cách cấu hình Cụm Galera với MySQL trên server Ubuntu 18.04
2019-12-16
Cách quản lý và sử dụng trình kích hoạt database MySQL trên Ubuntu 18.04
2019-12-10
Cách tạo một ứng dụng trích dẫn đầy cảm hứng bằng AdonisJs và MySQL
2019-11-22
Cách cài đặt MySQL mới nhất trên Debian 10
2019-07-25
Cách triển khai ứng dụng cốt lõi ASP.NET với server MySQL bằng Nginx trên Ubuntu 18.04
2019-07-23
Source: https://thomaygiat.com
Category : Kỹ Thuật Số
Chuyển vùng quốc tế MobiFone và 4 điều cần biết – MobifoneGo
Muốn chuyển vùng quốc tế đối với thuê bao MobiFone thì có những cách nào? Đừng lo lắng, bài viết này của MobiFoneGo sẽ giúp…
Cách copy dữ liệu từ ổ cứng này sang ổ cứng khác
Bạn đang vướng mắc không biết làm thế nào để hoàn toàn có thể copy dữ liệu từ ổ cứng này sang ổ cứng khác…
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel
Hướng dẫn xử lý dữ liệu từ máy chấm công bằng Excel Xử lý dữ liệu từ máy chấm công là việc làm vô cùng…
Cách nhanh nhất để chuyển đổi từ Android sang iPhone 11 | https://thomaygiat.com
Bạn đã mua cho mình một chiếc iPhone 11 mới lạ vừa ra mắt, hoặc có thể bạn đã vung tiền và có một chiếc…
Giải pháp bảo mật thông tin trong các hệ cơ sở dữ liệu phổ biến hiện nay
Hiện nay, với sự phát triển mạnh mẽ của công nghệ 4.0 trong đó có internet và các thiết bị công nghệ số. Với các…
4 điều bạn cần lưu ý khi sao lưu dữ liệu trên máy tính
08/10/2020những chú ý khi tiến hành sao lưu dữ liệu trên máy tính trong bài viết dưới đây của máy tính An Phát để bạn…