豌豆Ai站群搜索引擎系统 V.25.10.25 网址:www.wd.chat

🗣 Wd提问: php连接mysql 二进制

🤖 Ai回答:
在 PHP 中连接 MySQL 数据库并操作 二进制数据(如 BLOB、图片、文件等),通常涉及以下几个步骤:

1、使用 PDO 或 MySQLi 连接 MySQL。
2、准备 SQL 语句,使用预处理防止 SQL 注入(尤其重要,因为二进制数据可能包含特殊字符)。
3、存储或读取二进制数据(如图像、PDF 等)。

✅ 示例:使用 PDO 存储和读取二进制数据(BLOB)

1、创建表结构(MySQL)
sql
CREATE TABLE files (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
data LONGBLOB,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

2、PHP 代码:将文件存入 MySQL(写入二进制数据)

php
<?php
$host = 'localhost';
$db = 'testdb';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';

$dsn = mysql:host=$host;dbname=$db;charset=$charset;
$options = [
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE = PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES = false,
];

try {
$pdo = new PDO($dsn, $user, $pass, $options);

// 要存储的文件路径
$filePath = 'example.jpg'; // 替换为你的文件路径
$fileName = basename($filePath);

if (!file_exists($filePath)) {
die(文件不存在!);
}

// 读取文件为二进制数据
$fileData = file_get_contents($filePath);

// 插入到数据库
$stmt = $pdo-prepare(INSERT INTO files (name, data) VALUES (?, ?));
$stmt-bindParam(1, $fileName, PDO::PARAM_STR);
$stmt-bindParam(2, $fileData, PDO::PARAM_LOB); // 关键:使用 PARAM_LOB 处理大对象

$stmt-execute();

echo 文件已成功存储到数据库!\n;

} catch (PDOException $e) {
echo 错误: 、$e-getMessage();
}
?

⚠️ 注意:`PDO::PARAM_LOB` 会自动处理流和二进制数据,是处理 BLOB 的推荐方式。

3、PHP 代码:从 MySQL 读取二进制数据并输出

php
<?php
$host = 'localhost';
$db = 'testdb';
$user = 'root';
$pass = 'password';
$charset = 'utf8mb4';

$dsn = mysql:host=$host;dbname=$db;charset=$charset;
$options = [
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE = PDO::FETCH_ASSOC,
];

try {
$pdo = new PDO($dsn, $user, $pass, $options);

// 获取最新一条记录
$stmt = $pdo-query(SELECT name, data FROM files ORDER BY id DESC LIMIT 1);
$row = $stmt-fetch();

if ($row) {
// 输出文件信息
$fileName = $row['name'];
$fileData = $row['data']; // 自动是二进制字符串

// 设置正确的 Content-Type(可根据扩展名判断)
$mime = mime_content_type(finfo_open(FILEINFO_MIME_TYPE), $fileName) ?: 'application/octet-stream';
header(Content-Type: $mime);
header(Content-Disposition: attachment; filename=\$fileName\);

echo $fileData; // 输出二进制数据
} else {
echo 没有找到文件。;
}

} catch (PDOException $e) {
echo 错误: 、$e-getMessage();
}
?

🔐 安全建议

始终使用 预处理语句(Prepared Statements)。
不要直接拼接二进制数据到 SQL 字符串。
对于大文件,考虑是否真的需要存入数据库(有时存文件路径更高效)。

📌 补充:使用 MySQLi 方式(面向对象)

php
$mysqli = new mysqli($host, $user, $pass, $db);

if ($mysqli-connect_error) {
die(连接失败: 、$mysqli-connect_error);
}

// 存储文件
$filePath = 'example.pdf';
$name = basename($filePath);
$data = $mysqli-real_escape_string(file_get_contents($filePath)); // 注意:real_escape_string 可用于转义,但推荐用预处理

$stmt = $mysqli-prepare(INSERT INTO files (name, data) VALUES (?, ?));
$stmt-bind_param(sb, $name, $data); // 'b' 表示 blob(MySQLi 支持)

$stmt-send_long_data(1, file_get_contents($filePath)); // 可选:分块发送大数据
$stmt-execute();

echo 文件已保存!;

注意:`bind_param(sb)` 中的 `b` 表示该参数是 blob 类型。

✅ 总结

| 功能 | 推荐方法 |

| 连接数据库 | PDO 或 MySQLi |
| 存储二进制 | 使用 `PDO::PARAM_LOB` 或 `bind_param(b)` |
| 防止注入 | 预处理语句 |
| 大文件处理 | 考虑存储文件路径而非 BLOB |

如果你有具体场景(如上传图片、生成 PDF 并存储等),可以告诉我,我可以提供更具体的代码示例。

Ai作答

📣 商家广告


豌豆Ai站群搜索引擎系统

广告招商

高防vps

广告招商

香港vps


0

IP地址: 200.66.244.0

搜索次数: 0

提问时间: 2025-11-12 02:10:14

🛒 域名购买
827.net.cn
84.gs
3.bj.cn
yf.gs
oz.gs
728.net.cn
lw.biz
6.ac.cn
yk.gs
hangdang.net

❓️ 热门提问
2 ip
香港VPS主机评测
PHP二次开发问答系统
云服务器-免费版
idc托管服务商
云服务器和vps的区别
二级 域名 购买
服务器入云
国内十大搜索引擎入口
社交媒体广告工具
豌豆Ai站群搜索引擎系统

🌐 域名评估
aaa.qh.cn
aa.hl.cn
t-x.com.cn
byd.cq.cn
3735.com
vtol.run
826.net.cn
jgdh.cn
t.hb.cn
drones.ltd

⛏ 最新挖掘
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜

🖌 热门作画

🤝 关于我们:
豌豆Ai 域名 建站 站群 留痕 推广 评估 源码
开发Ai 工具 日记 价格 加盟 广告 流量 留言 联系

🗨 加入群聊
群

🔗 友情链接
搜索引擎导航  广州月饼厂家  ai提问

🧰 站长工具
Ai工具  whois查询  搜索

📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。

👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。

上一篇 90382 90383 90384 下一篇