在開發中,我們經常需要將PDF文件保存到數據庫中,并將其鏈接保存在與PDF相關的數據記錄中。
假設我們有兩個數據庫表:
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用于保存產品信息,pdf_link字段用于保存對應的PDF文件鏈接,表pdf用于保存PDF文件的實際數據。
下面是查詢數據時的示例代碼:
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');
在上面的查詢語句中,我們通過LEFT JOIN將表product和表pdf關聯起來,其中pdf_link字段與pdf表中的數據進行關聯。PDF鏈接是使用pdf表中的id來生成的,并以“/pdf/”作為前綴。然后我們從product表中選擇所需的字段,并選擇pdf表中的name字段和id字段。
在實際的開發中,我們需要處理PDF文件的上傳和存儲,以及將PDF鏈接保存到數據庫中的過程。在存儲PDF文件的過程中,我們需要使用php庫來處理文件上傳和保存文件。在保存完文件后,我們需要將文件數據插入到pdf表中,并獲取插入的id來生成PDF鏈接。
// 處理上傳的PDF if (isset($_FILES['pdf']) && $_FILES['pdf']['error'] === UPLOAD_ERR_OK) { $pdf = $_FILES['pdf']; // 保存PDF文件到服務器 $pdf_data = file_get_contents($pdf['tmp_name']); $pdf_path = '/pdf/' . uniqid() . '.pdf'; file_put_contents($_SERVER['DOCUMENT_ROOT'] . $pdf_path, $pdf_data); // 插入PDF數據到數據庫 $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文件被上傳,如果有,則保存文件的數據和路徑。然后我們將PDF數據插入到pdf表中,并獲取插入的id值。最后,我們將PDF鏈接(pdf_path)插入到product表中的pdf_link字段中。
總之,在保存PDF鏈接到數據庫中時,我們需要獲取PDF文件的id,并將其與鏈接一起保存到數據庫中。在查詢數據時,我們需要使用LEFT JOIN來將product表和pdf表進行關聯。