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

🗣 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 风格)。

如有需要,我也可以为你提供 带分页、模型自动映射的增强版。



是否需要我帮你生成一个完整项目结构?或者集成到某个框架中?

Ai作答

📣 商家广告


广告招商

广告招商

域名抢注

广告招商

取名


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》搭建本站。

上一篇 90367 90368 90369 下一篇