🗣 Wd提问: php连接mysql 封装类
🤖 Ai回答: 下面是一个 简洁、实用、可复用的 PHP MySQL 数据库连接封装类,支持:
使用 PDO 连接(推荐,安全、支持预处理)
自动处理异常
支持查询(SELECT)、插入(INSERT)、更新(UPDATE)、删除(DELETE)
支持预处理语句(防止 SQL 注入)
支持事务操作
代码结构清晰,易于扩展
✅ `Database.php` —— 封装类
php
<?php
class Database {
private $host = 'localhost';
private $dbname = 'your_database';
private $username = 'your_username';
private $password = 'your_password';
private $pdo;
private $stmt;
public function __construct() {
try {
$dsn = mysql:host={$this-host};dbname={$this-dbname};charset=utf8mb4;
$options = [
PDO::ATTR_ERRMODE = PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE = PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES = false, // 启用真实预处理
];
$this-pdo = new PDO($dsn, $this-username, $this-password, $options);
} catch (PDOException $e) {
die(数据库连接失败: 、$e-getMessage());
}
}
// 执行查询(返回结果集)
public function query($sql, $params = []) {
$this-stmt = $this-pdo-prepare($sql);
$this-stmt-execute($params);
return $this-stmt;
}
// 获取单行数据
public function fetchOne($sql, $params = []) {
$stmt = $this-query($sql, $params);
return $stmt-fetch();
}
// 获取多行数据
public function fetchAll($sql, $params = []) {
$stmt = $this-query($sql, $params);
return $stmt-fetchAll();
}
// 执行插入、更新、删除(返回影响行数)
public function execute($sql, $params = []) {
$this-stmt = $this-pdo-prepare($sql);
return $this-stmt-execute($params);
}
// 获取最后插入的 ID
public function lastInsertId() {
return $this-pdo-lastInsertId();
}
// 开始事务
public function beginTransaction() {
return $this-pdo-beginTransaction();
}
// 提交事务
public function commit() {
return $this-pdo-commit();
}
// 回滚事务
public function rollBack() {
return $this-pdo-rollBack();
}
// 获取当前连接对象(用于高级操作)
public function getConnection() {
return $this-pdo;
}
// 关闭连接(可选,通常由垃圾回收自动处理)
public function close() {
$this-pdo = null;
}
public function __destruct() {
$this-close();
}
}
📌 使用示例
1、基本查询(带参数)
php
$db = new Database();
// 查询用户
$users = $db-fetchAll(SELECT * FROM users WHERE age ?, [18]);
foreach ($users as $user) {
echo 姓名: {$user['name']}, 年龄: {$user['age']}\n;
}
2、插入数据
php
$sql = INSERT INTO users (name, email, age) VALUES (?, ?, ?);
$result = $db-execute($sql, ['张三', 'zhangsan@65.hk', 25]);
if ($result) {
echo 插入成功,新用户ID: 、$db-lastInsertId();
}
3、事务操作(推荐用于多表操作)
php
$db-beginTransaction();
try {
$db-execute(INSERT INTO users (name, email) VALUES (?, ?), ['李四', 'lisi@65.hk']);
$db-execute(INSERT INTO logs (action) VALUES (?), ['添加用户']);
$db-commit();
echo 事务提交成功;
} catch (Exception $e) {
$db-rollBack();
echo 事务回滚: 、$e-getMessage();
}
🔐 安全提示
✅ 使用 `PDO::ATTR_EMULATE_PREPARES = false` 确保使用真正的预处理。
✅ 所有查询都应使用参数化方式,避免注入攻击。
❌ 不要直接拼接字符串到 SQL。
💡 可选优化建议
1、配置文件分离:将数据库配置放在 `config.php` 中,如:
php
define('DB_HOST', 'localhost');
define('DB_NAME', 'test');
define('DB_USER', 'root');
define('DB_PASS', '123456');
2、日志记录:可加入 `error_log()` 记录执行的 SQL(调试用)。
3、连接池(生产环境):考虑使用连接池或框架(如 Laravel、ThinkPHP)。
✅ 总结
这个封装类简单、安全、易用,适合中小型项目。如果你需要更高级功能(如分页、模型映射),可以基于此扩展为 ORM(如 Eloquent 风格)。
如有需要,我也可以为你提供 带分页、模型自动映射的增强版。
是否需要我帮你生成一个完整项目结构?或者集成到某个框架中?
📣 商家广告:





0
IP地址: 164.251.0.12
搜索次数: 0
提问时间: 2025-11-12 02:03:54
🛒 域名购买:
83.gs
63.gold
t-v.com.cn
souhuai.com.cn
jqjp.cn
389.net.cn
xg.gs
ousou.cn
zhansou.com.cn
g-a.com.cn
❓️ 热门提问:
深圳机房工程
ip 0/24
Schema与论坛SEO
云服务器干什么用的
电梯机房吊钩要求
.cloud域名注册
vps视觉定位
vps服务器欧洲
科迪亚电脑主机好不好
VPS建站服务器性能
豌豆Ai站群搜索引擎系统
🌐 域名评估:
uav.cool
todm.cn
evtol.hb.cn
shenhongzhi.com
aa.ln.cn
hqge.cn
musk.games
kwgj.cn
vtol.gz.cn
qj.gs
⛏ 最新挖掘:
凯里酸汤鱼
贵阳烤脑花
都匀毛尖茶
花溪牛肉粉
贵阳烤生蚝
贵阳烤豆腐
贵阳纸包鱼
贵阳特色菜
🖌 热门作画:
🤝 关于我们:
豌豆Ai
域名
建站
站群
留痕
推广
评估
源码
开发Ai
工具
日记
价格
加盟
广告
流量
留言
联系
🗨 加入群聊:
🔗 友情链接:
站搜
聊天室网页版
ai提问
🧰 站长工具:
Ai工具 whois查询 搜索
📢 温馨提示:本站所有问答由Ai自动创作,内容仅供参考,若有误差请用“联系”里面信息通知我们人工修改或删除。
👉 技术支持:本站由豌豆Ai提供技术支持,使用的最新版:《豌豆Ai站群搜索引擎系统 V.25.10.25》搭建本站。