在開發(fā)中,我們經(jīng)常需要將PDF文件保存到數(shù)據(jù)庫(kù)中,并將其鏈接保存在與PDF相關(guān)的數(shù)據(jù)記錄中。
假設(shè)我們有兩個(gè)數(shù)據(jù)庫(kù)表:
CREATE TABLE `product` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `pdf_link` varchar(255) DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4; CREATE TABLE `pdf` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(50) DEFAULT NULL, `data` longblob, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4;
其中,表product用于保存產(chǎn)品信息,pdf_link字段用于保存對(duì)應(yīng)的PDF文件鏈接,表pdf用于保存PDF文件的實(shí)際數(shù)據(jù)。
下面是查詢數(shù)據(jù)時(shí)的示例代碼:
SELECT p.id, p.name, pdf.name AS pdf_name, pdf.id AS pdf_id FROM product p LEFT JOIN pdf ON p.pdf_link = CONCAT('/pdf/', pdf.id, '.pdf');
在上面的查詢語(yǔ)句中,我們通過(guò)LEFT JOIN將表product和表pdf關(guān)聯(lián)起來(lái),其中pdf_link字段與pdf表中的數(shù)據(jù)進(jìn)行關(guān)聯(lián)。PDF鏈接是使用pdf表中的id來(lái)生成的,并以“/pdf/”作為前綴。然后我們從product表中選擇所需的字段,并選擇pdf表中的name字段和id字段。
在實(shí)際的開發(fā)中,我們需要處理PDF文件的上傳和存儲(chǔ),以及將PDF鏈接保存到數(shù)據(jù)庫(kù)中的過(guò)程。在存儲(chǔ)PDF文件的過(guò)程中,我們需要使用php庫(kù)來(lái)處理文件上傳和保存文件。在保存完文件后,我們需要將文件數(shù)據(jù)插入到pdf表中,并獲取插入的id來(lái)生成PDF鏈接。
// 處理上傳的PDF if (isset($_FILES['pdf']) && $_FILES['pdf']['error'] === UPLOAD_ERR_OK) { $pdf = $_FILES['pdf']; // 保存PDF文件到服務(wù)器 $pdf_data = file_get_contents($pdf['tmp_name']); $pdf_path = '/pdf/' . uniqid() . '.pdf'; file_put_contents($_SERVER['DOCUMENT_ROOT'] . $pdf_path, $pdf_data); // 插入PDF數(shù)據(jù)到數(shù)據(jù)庫(kù) $stmt = $pdo->prepare('INSERT INTO pdf (name, data) VALUES (?, ?)'); $stmt->execute([$pdf['name'], $pdf_data]); $pdf_id = $pdo->lastInsertId(); } // 將PDF鏈接插入到product表中 if (isset($pdf_id)) { $stmt = $pdo->prepare('UPDATE product SET pdf_link = ? WHERE id = ?'); $stmt->execute([$pdf_path, $product_id]); }
在上面的代碼中,我們首先檢查是否有PDF文件被上傳,如果有,則保存文件的數(shù)據(jù)和路徑。然后我們將PDF數(shù)據(jù)插入到pdf表中,并獲取插入的id值。最后,我們將PDF鏈接(pdf_path)插入到product表中的pdf_link字段中。
總之,在保存PDF鏈接到數(shù)據(jù)庫(kù)中時(shí),我們需要獲取PDF文件的id,并將其與鏈接一起保存到數(shù)據(jù)庫(kù)中。在查詢數(shù)據(jù)時(shí),我們需要使用LEFT JOIN來(lái)將product表和pdf表進(jìn)行關(guān)聯(lián)。