Tệp lưu trữ php trong blob cơ sở dữ liệu

Tôi đã trình bày ví dụ tải tệp lên bằng PHP trong các hướng dẫn trước tải tệp PHP lên nhưng trong hướng dẫn này, tôi sẽ chỉ cho bạn cách lưu tệp đã tải lên vào cơ sở dữ liệu MySQL bằng PHP

Bạn có thể thắc mắc tại sao bạn cần lưu nội dung tệp vào cơ sở dữ liệu thay vì chỉ lưu vào hệ thống tệp. Trong trường hợp ứng dụng PHP cần đặt toàn bộ tệp thì phương pháp ưu tiên sẽ là đưa tệp vào hệ thống tệp của máy chủ và lưu đường dẫn tệp vào cơ sở dữ liệu

Tuy nhiên, trong các tình huống, ứng dụng cần lưu toàn bộ nội dung tệp vào cơ sở dữ liệu cùng với các dữ liệu khác. Trong những trường hợp như vậy, bạn phải đặt nội dung tệp vào trường kiểu dữ liệu BLOB của MySQL

Ưu điểm của việc lưu trữ tệp vào cơ sở dữ liệu

  1. Tính nhất quán của ACID [Nguyên tử, Tính nhất quán, Tính toàn vẹn, Độ bền] bao gồm cả việc khôi phục bản cập nhật sẽ phức tạp khi các tệp được lưu trữ bên ngoài cơ sở dữ liệu. Có các tệp và cơ sở dữ liệu đồng bộ và có thể tham gia vào các giao dịch có thể rất hữu ích
  2. Các tệp đi cùng với cơ sở dữ liệu và không thể tách rời khỏi nó
  3. Sao lưu tự động bao gồm các tệp nhị phân

Nhược điểm của việc lưu trữ tệp vào cơ sở dữ liệu

  1. Kích thước của tệp nhị phân khác nhau giữa các cơ sở dữ liệu
  2. Lưu trữ các tệp trong cơ sở dữ liệu có thể làm cho cơ sở dữ liệu lớn hơn nhiều. Do đó làm tăng kích thước của cơ sở dữ liệu. Mức độ kiến ​​thức cần thiết để duy trì cơ sở dữ liệu tăng tỷ lệ thuận với kích thước của cơ sở dữ liệu, i. e. , cơ sở dữ liệu lớn phức tạp hơn để duy trì hơn cơ sở dữ liệu nhỏ. Do đó, nó làm tăng chi phí bảo trì cho doanh nghiệp
  3. Cơ sở dữ liệu lớn hơn sẽ tiêu tốn nhiều bộ nhớ hơn khi chúng cố gắng đưa vào bộ nhớ càng nhiều dữ liệu càng tốt
  4. Tính di động cần được quan tâm nếu các tính năng dành riêng cho hệ thống như đối tượng FILESTREAM của SQL Server được sử dụng và trong tương lai, bạn cần chuyển sang một hệ thống cơ sở dữ liệu khác
  5. Mã lưu trữ tệp vào cơ sở dữ liệu có thể là một vấn đề. Khi bạn lưu trữ tệp trên hệ thống tệp, sẽ không có lớp bổ sung nào liên quan để bọc/chỉnh sửa/thay đổi tệp nguồn
  6. Việc cung cấp các tệp cho một trang web sẽ phức tạp hơn bởi vì bạn phải viết một trình xử lý để truyền tệp nhị phân từ cơ sở dữ liệu. Một lần nữa, việc thêm một trình xử lý không phải là không thể nhưng làm tăng thêm độ phức tạp
  7. Trong nhiều trường hợp, nó sẽ làm phình các tệp cơ sở dữ liệu và gây ra một số vấn đề về hiệu suất. Nếu bạn dán các đốm màu vào một bảng có nhiều cột thì điều đó thậm chí còn tệ hơn

điều kiện tiên quyết

PHP7. 4. 3, MySQL7. 0. 17, Máy chủ HTTP Apache 2. 4

Tải tệp lên và lưu vào MySQL

Trong ví dụ này, các tệp được chọn bằng các nút duyệt và các tệp được lưu vào trường BLOB của cơ sở dữ liệu MySQL. Tập lệnh PHP lưu trữ các tệp vào cột được chỉ định của bảng cơ sở dữ liệu và trả về phản hồi dưới dạng thông báo thành công từ tập lệnh PHP. Là một bước xác thực, tôi đã thêm chỉ để kiểm tra xem bạn đã chọn ít nhất một tệp để tải lên hay chưa

Hướng dẫn này sẽ cung cấp cho bạn thêm liên kết đính kèm để tải lên tệp, vì vậy bạn sẽ nhấp vào Đính kèm tệp khác, sau đó bạn sẽ nhận được nút Chọn tệp để đính kèm tệp khác. Nếu bạn không muốn tải lên tệp đã chọn, bạn có thể xóa tệp đính kèm bằng liên kết Xóa

Cần có biểu mẫu HTML bên dưới để tải lên nhiều tệp


	
		Files Save into MySQL database using PHP
		
Browse a file
Attach another file
 

Cần có các đoạn mã jQuery bên dưới để đính kèm thêm tệp và xóa tệp đã chọn nếu bạn không muốn tải tệp đã chọn lên

Nói chung, khi chúng tôi tải lên tệp hình ảnh bằng PHP, hình ảnh đã tải lên được lưu trữ trong một thư mục của máy chủ và tên hình ảnh tương ứng được lưu trữ trong cơ sở dữ liệu. Tại thời điểm hiển thị, tệp được lấy từ máy chủ và hình ảnh được hiển thị trên trang web. Tuy nhiên, nếu bạn không muốn chiếm dung lượng của máy chủ, tệp chỉ có thể được lưu trữ trong cơ sở dữ liệu. Bạn có thể tải lên một hình ảnh mà không cần lưu trữ tệp trên máy chủ bằng cơ sở dữ liệu MySQL. Thật dễ dàng để lưu trữ và truy xuất hình ảnh từ cơ sở dữ liệu bằng PHP và MySQL

Nếu bạn lo lắng về dung lượng máy chủ và cần dung lượng trống trên máy chủ của mình, bạn có thể chèn tệp hình ảnh trực tiếp vào cơ sở dữ liệu mà không cần tải nó lên thư mục của máy chủ. Quy trình này giúp tối ưu hóa không gian máy chủ vì nội dung tệp hình ảnh được lưu trữ trong cơ sở dữ liệu chứ không phải máy chủ. Trong hướng dẫn này, chúng tôi sẽ chỉ cho bạn cách lưu trữ các tệp hình ảnh vào cơ sở dữ liệu MySQL và truy xuất hình ảnh từ cơ sở dữ liệu bằng PHP

Trước khi bắt đầu tích hợp tệp tải lên với cơ sở dữ liệu, hãy xem cấu trúc tệp

store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css

Chèn tệp hình ảnh trong MySQL

MySQL có kiểu dữ liệu BLOB [đối tượng lớn nhị phân] có thể chứa một lượng lớn dữ liệu nhị phân. Kiểu dữ liệu BLOB là hoàn hảo để lưu trữ dữ liệu hình ảnh trong cơ sở dữ liệu. Trong MySQL, có sẵn bốn loại BLOB – TINYBLOB, BLOB, MEDIUMBLOB và LONGBLOB. Kiểu dữ liệu LONGBLOB là hoàn hảo để lưu trữ dữ liệu tệp hình ảnh

Tạo bảng cơ sở dữ liệu

Để lưu trữ nội dung tệp, cần có một bảng trong cơ sở dữ liệu. SQL sau đây tạo một bảng

store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css
1 với trường kiểu dữ liệu LONGBLOB trong cơ sở dữ liệu MySQL

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Cấu hình cơ sở dữ liệu [dbConfig. php]

Tệp

store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css
2 được sử dụng để kết nối và chọn cơ sở dữ liệu. Chỉ định máy chủ cơ sở dữ liệu [
store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css
3], tên người dùng [
store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css
4], mật khẩu [
CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
0] và tên [
CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
1] theo thông tin đăng nhập cơ sở dữ liệu MySQL của bạn

// Database configuration
$dbHost     = "localhost";
$dbUsername = "root";
$dbPassword = "root";
$dbName     = "codexworld";

// Create database connection
$db = new mysqli[$dbHost, $dbUsername, $dbPassword, $dbName];

// Check connection
if [$db->connect_error] {
    die["Connection failed: " . $db->connect_error];
}

Biểu mẫu tải lên hình ảnh

Tạo biểu mẫu HTML có trường nhập tệp để chọn tệp hình ảnh để tải lên. Hãy đảm bảo rằng

thẻ chứa các thuộc tính sau
  • phương pháp = "đăng"
  • enctype="multipart/form-data"
    Select Image File:
    
    

Lưu trữ tệp hình ảnh trong cơ sở dữ liệu [tải lên. php]

Tệp

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
2 xử lý quá trình tải lên hình ảnh và chèn cơ sở dữ liệu

  • Kiểm tra xem người dùng có chọn tệp hình ảnh để tải lên không
  • Truy xuất nội dung của tệp hình ảnh theo tên tmp_name bằng hàm PHP file_get_contents[]
  • Chèn nội dung nhị phân của hình ảnh vào cơ sở dữ liệu bằng PHP và MySQL
  • Hiển thị trạng thái tải lên hình ảnh cho người dùng
________số 8

Truy xuất hình ảnh từ cơ sở dữ liệu [xem. php]

Trong tệp

CREATE TABLE `images` [
  `id` int[11] NOT NULL AUTO_INCREMENT,
  `image` longblob NOT NULL,
  `created` datetime NOT NULL DEFAULT current_timestamp[],
  PRIMARY KEY [`id`]
] ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;
3, chúng tôi sẽ lấy nội dung hình ảnh từ cơ sở dữ liệu MySQL và liệt kê chúng trên trang web

  • Các tham số dữ liệu, bộ ký tự và base64 trong thuộc tính src, được sử dụng để hiển thị hình ảnh BLOB từ cơ sở dữ liệu MySQL
store_retrieve_image_from_database/
├── dbConfig.php
├── index.php
├── upload.php
├── view.php
└── css/
    └── style.css
0

Tải lên nhiều hình ảnh và lưu trữ trong cơ sở dữ liệu bằng PHP và MySQL

Phần kết luận

Bài hướng dẫn các bạn tích hợp chức năng upload file mà không cần lưu trữ file trên server. Bạn có thể sử dụng tập lệnh mẫu này để tải lên và lưu trữ hình ảnh trong cơ sở dữ liệu, đồng thời tìm nạp hình ảnh từ cơ sở dữ liệu và hiển thị chúng trên trang web bằng PHP và MySQL. Để làm cho quá trình tải lên hình ảnh trở nên thân thiện với người dùng, hãy sử dụng jQuery để tải lên các tệp có thanh tiến trình bằng Ajax và PHP

Bạn có muốn nhận trợ giúp triển khai hay sửa đổi hoặc nâng cao chức năng của tập lệnh này không?

Làm cách nào để tải tệp lên bằng BLOB trong PHP?

$myfile = fopen["Xin chàoWorld. txt", "w"] or die["Không thể mở tệp. "]; fclose[$myfile]; # Tải tệp lên dưới dạng block blob echo "Uploading BlockBlob. ". PHP_EOL;

Làm cách nào để lưu dữ liệu blob trong PHP?

Để hiển thị hình ảnh BLOB cho trình duyệt, hãy tạo tệp PHP và thực hiện các thao tác sau. Tệp này sau đó sẽ được sử dụng làm nguồn thẻ Nhận dữ liệu hình ảnh được lưu trữ với trường BLOB của MySQL trong cơ sở dữ liệu . Đặt loại nội dung là hình ảnh [hình ảnh/jpg, hình ảnh/gif,…]

Làm cách nào để chèn BLOB vào cơ sở dữ liệu?

Chèn dữ liệu BLOB vào cơ sở dữ liệu .
Đầu tiên, mở tệp để đọc ở chế độ nhị phân
Thứ hai, xây dựng câu lệnh INSERT
Thứ ba, liên kết phần xử lý tệp với câu lệnh đã chuẩn bị bằng cách sử dụng phương thức bindParam[] và gọi phương thức exec[] để thực hiện truy vấn

Làm cách nào để chèn dữ liệu blob vào MySQL bằng PHP?

Và đây là truy vấn của tôi để chèn hình ảnh hoặc ít nhất đó là những gì nó nên. //Lưu ảnh nhị phân vào cơ sở dữ liệu $tmp_img = $this->image['tmp_name'];

Chủ Đề