在 PHP 中可以使用二进制数据类型的 BLOB 存储文件到数据库,包括附件。以下是一个简单的示例代码来保存上传的文件到 MySQL 数据库中。
1. 创建数据库表
首先,需要在 MySQL 中创建一个表来存储上传文件的数据。以下是一个示例表结构:
CREATE TABLE `attachments` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`filename` varchar(255) NOT NULL DEFAULT ”,
`mime_type` varchar(50) NOT NULL DEFAULT ”,
`filedata` mediumblob NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
2. 上传文件
在网页中准备一个上传文件的表单,并添加一个 PHP 脚本来处理上传。以下是一个示例代码:
if(isset($_FILES[‘file’]) && !empty($_FILES[‘file’][‘name’])) {
// 允许上传的 MIME 类型
$allowedMimeTypes = array(‘image/jpeg’, ‘image/png’, ‘image/gif’, ‘application/pdf’, ‘application/msword’, ‘application/vnd.ms-excel’);
// 存放文件的文件夹
$uploadFolder = ‘uploads/’;
// 取出上传的文件信息
$fileName = $_FILES[‘file’][‘name’];
$fileSize = $_FILES[‘file’][‘size’];
$fileTmpName = $_FILES[‘file’][‘tmp_name’];
$fileType = $_FILES[‘file’][‘type’];
// 判断文件类型是否允许上传
if(in_array($fileType, $allowedMimeTypes)) {
// 生成新的文件名
$newFileName = uniqid() . ‘-‘ . $fileName;
// 存放最终的文件路径
$uploadFilePath = $uploadFolder . $newFileName;
// 将文件移到指定路径
if(move_uploaded_file($fileTmpName, $uploadFilePath)) {
// 保存文件信息到数据库
$conn = new mysqli("localhost", "username", "password", "database_name");
$stmt = $conn->prepare("INSERT INTO attachments (filename, mime_type, filedata) VALUES (?, ?, ?)");
$stmt->bind_param("sss", $newFileName, $fileType, file_get_contents($uploadFilePath));
$stmt->execute();
$stmt->close();
$conn->close();
// 显示上传成功信息
echo "文件上传成功!";
} else {
// 显示上传失败信息
echo "上传文件时出错!";
}
} else {
// 显示不允许上传的文件类型信息
echo "该文件类型不允许上传!";
}
}
3. 下载文件
可以通过 PHP 代码从数据库中读取文件数据,并输出到浏览器中实现下载功能。以下是一个示例代码:
if(isset($_GET[‘id’]) && !empty($_GET[‘id’])) {
$conn = new mysqli("localhost", "username", "password", "database_name");
$stmt = $conn->prepare("SELECT filename, mime_type, filedata FROM attachments WHERE id = ?");
$stmt->bind_param("i", $_GET[‘id’]);
$stmt->execute();
$stmt->store_result();
if($stmt->num_rows == 1) {
$stmt->bind_result($filename, $mime_type, $filedata);
$stmt->fetch();
// 输出文件内容到浏览器
header("Content-Type: " . $mime_type);
header("Content-Disposition: attachment; filename="" . $filename . """);
echo $filedata;
}
$stmt->close();
$conn->close();
}
以上是将附件存储到数据库的简单实现方法。但需要注意的是,在实际使用中,存储文件到数据库的做法可能并不是最佳的选择,因为这会占用大量的数据库存储空间。因此,建议将文件存储到独立的文件系统或对象存储中,然后在数据库中存储文件的路径或访问地址。
在 PHP 中将附件存储到数据库中是一种常见的做法,它可以更好地管理文件、提供更快的访问和更好的数据安全性。在本文中,我将教你如何在 PHP 中将附件存储到数据库中。
首先要做的是创建一个数据库表来存储文件。以下是一个简单的文件表的示例:
CREATE TABLE files (
id INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(255) NOT NULL,
type VARCHAR(100) NOT NULL,
size INT NOT NULL,
content MEDIUMBLOB NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
在这个示例中,我们存储了文件的名称,类型,大小以及文件内容。注意到文件内容是使用 MEDIUMBLOB 类型存储的,这个类型用于存储中等大小(最大为 16MB)的二进制数据,非常适合存储文件的内容。
接下来,我们需要创建一个上传表单,让用户可以上传文件到我们的服务器上。以下是一个简单的上传表单的示例:
PHP File Upload to Database
在这个示例中,我们创建了一个包含一个文件输入元素和一个提交按钮的表单。当用户提交表单时,我们需要将文件存储到数据库中。
以下是 PHP 代码示例:
“`php
<?php
if (isset($_POST[‘submit’])) {
// 获取文件信息
$file_name = $_FILES[‘file’][‘name’];
$file_type = $_FILES[‘file’][‘type’];
$file_size = $_FILES[‘file’][‘size’];
$file_content = file_get_contents($_FILES[‘file’][‘tmp_name’]);
// 连接数据库
$conn = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) or die(‘Unable to connect to database’);
// 构造 SQL 语句
$sql = "INSERT INTO files (name, type, size, content) VALUES (‘$file_name’, ‘$file_type’, $file_size, ‘$file_content’)";
// 执行 SQL 语句
mysqli_query($conn, $sql);
// 关闭数据库连接
mysqli_close($conn);
}
在这个示例中,我们首先检查用户是否点击了提交按钮。如果是,我们获取上传文件的信息,并将文件内容读取到一个变量中。
接下来,我们连接到数据库并构造一个 SQL 语句,将文件的信息插入到数据库的文件表中。
最后,我们关闭数据库连接。
现在,你已经知道了如何将文件存储到数据库中。在实际应用中,你可能需要添加一些额外的逻辑,例如检查文件的大小和类型,防止 SQL 注入等。
总之,将文件存储到数据库中可以提供更好的文件管理和更好的数据安全性,这是一个非常有用的技术。
以上就是php教程:php附件怎么存到数据库分享!全部内容,如果想了解关于php教程内容,可以关注计算机技术网(www.ctvol.com)php技术教学分享栏目。
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/phpttorial/1463042.html