数据库怎么存照片php
时间 : 2023-03-30 12:47:02声明: : 文章内容来自网络,不保证准确性,请自行甄别信息有效性

在 PHP 中将照片存入数据库,需要使用 BLOB 类型的字段来存储二进制数据。BLOB 类型的字段是用于存储二进制大对象数据的字段类型,比如图片、音频、视频等文件类型。

以下是如何存储图片到数据库的步骤:

1. 创建一个包含 BLOB 类型字段的数据表

在 MySQL 中,可以通过以下 SQL 语句创建一个包含 BLOB 类型字段的数据表。

CREATE TABLE `images` (

`id` int(11) NOT NULL AUTO_INCREMENT,

`name` varchar(255) DEFAULT NULL,

`image` blob,

PRIMARY KEY (`id`)

) ENGINE=InnoDB DEFAULT CHARSET=utf8;

这个数据表包含三个字段:

- id:自增的 ID。

- name:存储图片的名称。

- image:存储图片的二进制数据。

2. 使用 PHP 代码将图片二进制数据插入数据库

假设有一个表单上传了一个名为“image.jpg”的图片文件,可以使用以下 PHP 代码将该图片文件的二进制数据插入到数据库中。

```php

// 获取上传的图片路径,假设是 "uploads/image.jpg"

$image_path = "uploads/image.jpg";

// 读取图片二进制数据

$image_binary = file_get_contents($image_path);

// 连接数据库

$db = new mysqli("localhost", "username", "password", "dbname");

// 插入数据到数据库

$stmt = $db->prepare("INSERT INTO `images` (`name`, `image`) VALUES (?, ?)");

$stmt->bind_param("sb", $image_name, $image_binary);

$image_name = "image.jpg";

$stmt->execute();

$stmt->close();

注意,上传的图片需要通过 file_get_contents 函数读取为二进制数据,然后通过 bind_param 函数将二进制数据绑定到 INSERT 语句中的 image 字段上。

3. 使用 PHP 代码从数据库读取图片二进制数据并显示

使用以下 PHP 代码从数据库中读取图片的二进制数据,并将其显示在浏览器中。

```php

// 连接数据库

$db = new mysqli("localhost", "username", "password", "dbname");

// 从数据库中读取数据

$id = 1; // 假设图片 ID 为 1

$stmt = $db->prepare("SELECT `image` FROM `images` WHERE `id` = ?");

$stmt->bind_param("i", $id);

$stmt->execute();

$stmt->bind_result($image_binary);

$stmt->fetch();

$stmt->close();

// 将图片数据输出到浏览器

header("Content-type: image/jpeg");

echo $image_binary;

注意,使用 header 函数将 Content-type 设置为对应的图片类型,这里假设图片为 JPEG 格式。同时,将读取的二进制数据直接输出即可让浏览器显示图片。

在PHP中,可以使用以下两种方式来存储照片到数据库中:

1. 将照片二进制数据存储到BLOB字段中

在MySQL数据库中,可以使用BLOB字段来存储二进制数据,包括照片。另外,为了减少数据库负担,通常会将照片压缩为较小的文件大小,然后再进行存储。以下是使用PHP将照片保存到BLOB字段的示例代码:

```php

// 读取照片二进制数据

$imageData = file_get_contents('my_photo.jpg');

// 连接数据库

$conn = mysqli_connect('localhost', 'username', 'password', 'mydatabase');

// 将照片数据插入到BLOB字段中

$sql = "INSERT INTO mytable (id, photo) VALUES (1, ?)";

$stmt = mysqli_prepare($conn, $sql);

mysqli_stmt_bind_param($stmt, "b", $imageData);

mysqli_stmt_execute($stmt);

mysqli_stmt_close($stmt);

mysqli_close($conn);

2. 存储照片文件路径到VARCHAR字段中

另一种方式是将照片保存到服务器上的文件系统中,然后将文件路径存储到数据库的VARCHAR字段中。以下是示例代码:

```php

// 上传照片到服务器

$targetDir = "uploads/";

$targetFile = $targetDir . basename($_FILES["file"]["name"]);

move_uploaded_file($_FILES["file"]["tmp_name"], $targetFile);

// 将照片文件路径存储到数据库

$conn = mysqli_connect('localhost', 'username', 'password', 'mydatabase');

$sql = "INSERT INTO mytable (id, photo_path) VALUES (1, '$targetFile')";

mysqli_query($conn, $sql);

mysqli_close($conn);

需要注意的是,在第二种方式中,需要确保服务器上的文件系统具有足够的空间来存储照片,并且需要确保各个服务器之间的文件路径一致。同时,还需要定期清理不需要的照片文件,以防止服务器空间占用过多。