如何在Mysql中直接储存图片
### 如何在MySQL中直接储存图片 随着互联网技术的发展与应用需求的增长,越来越多的应用场景需要在数据库中直接存储多媒体文件,如图片、音频或视频等。对于MySQL这种关系型数据库而言,虽然它主要用来存储结构化的文本数据,但也可以通过特定的方式支持二进制大对象(BLOB)类型的存储,从而实现图片等文件的直接存储。本文将详细介绍如何在MySQL中直接存储图片文件,并提供实际操作示例。 #### 在MySQL中建立一个新的数据库 你需要在MySQL中创建一个新的数据库,以便存储二进制文件。假设我们要创建的数据库名为`binary_data`,可以按照以下步骤进行: 1. **打开MySQL客户端**:通过命令行或其他图形界面工具登录MySQL服务器。 2. **创建数据库**:执行SQL语句`CREATE DATABASE binary_data;`来创建一个名为`binary_data`的新数据库。 3. **选择数据库**:使用`USE binary_data;`命令切换到刚创建的数据库。 4. **创建表格**:定义一个表用于存储文件信息,比如使用以下SQL语句创建一个包含文件描述、文件数据、文件名、文件大小和文件类型等字段的表: ```sql CREATE TABLE binary_data ( id INT(4) NOT NULL AUTO_INCREMENT PRIMARY KEY, description CHAR(50), bin_data LONGBLOB, filename CHAR(50), filesize CHAR(50), filetype CHAR(50) ); ``` #### 存储文件的示例程序 接下来,我们将通过一个PHP脚本演示如何将文件存储到MySQL数据库中。 ```php <?php // store.php3 - by Florian Dittmer <dittmer@gmx.net> ?> <HTML> <HEAD><TITLE>Store binary data into SQL Database</TITLE></HEAD> <BODY> <?php // 如果提交了表单,代码将被执行 if (isset($_POST['submit'])) { // 连接到数据库 // (你可能需要调整主机名、用户名和密码) $conn = mysqli_connect("localhost", "root", "password", "binary_data"); // 读取上传文件的信息 $description = $_POST['form_description']; $filename = $_FILES['form_data']['name']; $filesize = $_FILES['form_data']['size']; $filetype = $_FILES['form_data']['type']; $data = addslashes(file_get_contents($_FILES['form_data']['tmp_name'])); // 插入数据到数据库 $sql = "INSERT INTO binary_data (description, bin_data, filename, filesize, filetype) VALUES ('$description', '$data', '$filename', '$filesize', '$filetype')"; $result = mysqli_query($conn, $sql); if ($result) { $id = mysqli_insert_id($conn); echo "<p>This file has the following Database ID: <b>$id</b>"; } else { echo "Error inserting data: " . mysqli_error($conn); } mysqli_close($conn); } else { // 否则显示储存新数据的表单 ?> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" enctype="multipart/form-data"> File Description:<br> <input type="text" name="form_description" size="40"> <INPUT TYPE="hidden" name="MAX_FILE_SIZE" value="1000000"> <br>File to upload/store in database:<br> <input type="file" name="form_data" size="40"> <p><input type="submit" name="submit" value="Submit"> </form> <?php } ?> </BODY> </HTML> ``` ### 访问存储的文件 存储文件后,我们可以编写另一个PHP脚本来获取并显示这些文件。以下是获取文件的示例脚本: ```php <?php // getdata.php3 - by Florian Dittmer <dittmer@gmx.net> // 调用方法: getdata.php3?id=<id> $id = isset($_GET['id']) ? intval($_GET['id']) : null; if ($id) { // 连接到数据库 $conn = mysqli_connect("localhost", "root", "password", "binary_data"); // 查询文件数据 $query = "SELECT bin_data, filetype FROM binary_data WHERE id = $id"; $result = mysqli_query($conn, $query); if (mysqli_num_rows($result) > 0) { $row = mysqli_fetch_assoc($result); header('Content-Type: ' . $row['filetype']); echo $row['bin_data']; } else { echo "File not found."; } mysqli_close($conn); } else { echo "No file ID provided."; } ?> ``` 以上示例程序展示了如何使用PHP通过HTML表单上传文件到MySQL数据库以及如何从数据库中检索文件。需要注意的是,在实际部署时,应确保服务器的安全性和数据完整性,例如通过验证用户输入、使用安全的连接方式等措施。此外,考虑到性能问题,通常建议只在必要的情况下使用数据库来存储大文件,对于大量且频繁访问的大文件,可能需要考虑使用专门的文件存储服务。