当前位置: 首页 > news >正文

PHP与MySQL交互最佳实践

PHP与MySQL交互最佳实践

PHP和MySQL是经典搭配。PDO是现代PHP操作数据库的标准方式。今天说说PHP与MySQL交互的各种实践。

PDO连接配置。

```php
$host = 'localhost';
$dbname = 'test';
$username = 'root';
$password = '';
$charset = 'utf8mb4';

$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";

$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
PDO::ATTR_EMULATE_PREPARES => false,
PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8mb4 COLLATE utf8mb4_unicode_ci",
];

try {
$pdo = new PDO($dsn, $username, $password, $options);
echo "连接成功\n";
} catch (PDOException $e) {
die("连接失败: " . $e->getMessage());
}
?>

CRUD操作。

```php
$stmt = $pdo->prepare("INSERT INTO users (name, email, age) VALUES (?, ?, ?)");
$stmt->execute(['张三', 'zhangsan@test.com', 28]);
$userId = $pdo->lastInsertId();

$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch();

$stmt = $pdo->prepare("SELECT * FROM users WHERE status = ?");
$stmt->execute(['active']);
$users = $stmt->fetchAll();

$stmt = $pdo->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->execute(['李四', 1]);

$stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
$stmt->execute([1]);
?>

事务处理。

```php
function transferMoney(PDO $pdo, int $fromId, int $toId, float $amount): void
{
try {
$pdo->beginTransaction();
$pdo->prepare("UPDATE accounts SET balance = balance - ? WHERE id = ?")->execute([$amount, $fromId]);

$stmt = $pdo->prepare("SELECT balance FROM accounts WHERE id = ?");
$stmt->execute([$fromId]);
if ($stmt->fetchColumn() < 0) throw new Exception("余额不足");

$pdo->prepare("UPDATE accounts SET balance = balance + ? WHERE id = ?")->execute([$amount, $toId]);
$pdo->prepare("INSERT INTO transfer_log (from_id, to_id, amount) VALUES (?, ?, ?)")->execute([$fromId, $toId, $amount]);

$pdo->commit();
echo "转账成功\n";
} catch (Exception $e) {
$pdo->rollBack();
echo "转账失败: {$e->getMessage()}\n";
}
}
?>

游标分页。

```php
function paginate(PDO $pdo, ?int $cursor, int $perPage = 20): array
{
if ($cursor === null) {
$stmt = $pdo->prepare("SELECT * FROM articles ORDER BY id DESC LIMIT ?");
$stmt->execute([$perPage]);
} else {
$stmt = $pdo->prepare("SELECT * FROM articles WHERE id < ? ORDER BY id DESC LIMIT ?");
$stmt->execute([$cursor, $perPage]);
}
$items = $stmt->fetchAll();
$nextCursor = !empty($items) ? end($items)['id'] : null;
return ['items' => $items, 'next_cursor' => $nextCursor];
}
?>

连接管理在生产环境要注意。每次请求都创建新连接开销大。PHP-FPM模式下用持久连接要小心,连接状态可能被上一个请求污染。一般来说用PDO默认配置就行,不需要额外优化。

PHP操作MySQL用PDO就对了。预处理防止注入,事务保证一致性,索引提升性能。这些做好了,数据库层面基本没啥大问题。

http://www.rkmt.cn/news/1473193.html

相关文章:

  • Github Actions Schedule不准时?试试这个‘曲线救国’方案:用IFTTT或Cronhub免费触发workflow
  • 2026年6月鞍山金价走高,老旧黄金、投资金条安全变现全科普 - 余生黄金回收
  • AI辅助开发新思路:让快马AI帮你打造智能版网站故障诊断助手
  • 哈尔滨严寒地区旋转门厂家实力排行:适配性与服务对比 - 奔跑123
  • 江苏名扬激光智能装备:紫铜/储能液冷板激光焊接机等设备专业供应商 - 品牌推荐官
  • 2026海南企业经营公司工商变更全指南:不同类型、流程步骤及推荐TOP6代理财税机构公司 - GrowthUME
  • FPGA模块化设计利器:LogicLock区域规划与增量编译实战
  • Meta智能眼镜嵌入人脸识别代码,隐私问题再引关注!
  • 2026年雅思/DSE/英语/AP/ALEVEL培训机构推荐:新航道专业教学实力解析 - 品牌推荐官
  • 自动化AI算法训练服务器DLTM 零代码私有化让企业自主搭建专属智能AI训推平台
  • 3步突破网盘下载瓶颈:LinkSwift直链下载助手完全指南
  • 2026年膜结构工程实力推荐:上海尚朗建筑装饰工程有限公司全系产品解析 - 品牌推荐官
  • 技术深度解析:google-translate-api 如何实现免费无限制的Google翻译服务
  • JoyCon-Driver:在Windows上使用Switch Joy-Con控制器的终极指南
  • 2026年成都婚姻法律服务推荐:沈辉律师15年专注离婚纠纷及财产分割 - 品牌推荐官
  • 2026 青岛卫生间厨房阳台地下室漏水维修商家测评,多家防水企业综合评分横向对比,帮本地业主甄选靠谱堵漏维保团队 - 吉修匠
  • MICROSD CARD的MLC和SLC、TLC的区别。
  • HFSS新手避坑指南:手把手教你仿真威尔金森功分器(附参数设置与模型文件)
  • LTC6812芯片C++驱动代码包(支持12–18串锂电、SPI通信、均衡控制与故障解析)
  • 广东宠物包装定制工厂避坑指南:3个关键指标帮你筛选 - 变量人生001
  • 突破网盘下载限速的终极解决方案:9大平台直链提取工具完全指南
  • 深度解析:注册公司,一文看懂不同城市不同行业注册要求 - 速递信息
  • 昆山尊众建筑装饰工程:昆山墙面粉刷油漆哪家公司好 - LYL仔仔
  • 冰得宝100%果汁实力推荐:2025年3亿销售额背后的产品力与渠道布局解析 - 品牌推荐官
  • 3分钟掌握:这款开源游戏修改器如何让植物大战僵尸焕发新生?
  • 从手机信号格到核心网:拆解‘频段’参数在移动数据上网全流程中的作用
  • 2026年深圳收的顶同城收金榜冠,铂金k金黄金一站式变现 - 奢侈品回收测评
  • 2026年继承纠纷法律服务推荐:张小娥律师24年实战经验,专业处理继承、遗嘱继承案件 - 品牌推荐官
  • APP盲盒源码V6MAX:活动触达与复购召回方案 - 壹软科技
  • XHS-Downloader终极指南:轻松下载小红书作品的完整解决方案