当前位置: 首页 > 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.jsqmd.com/news/961522/

相关文章:

  • 2026年上海防水修缮服务商推荐:厂房/电梯井/幕墙/金属屋面/屋顶/外墙/车间/酒店专业防水修缮服务公司精选 - 品牌企业推荐师(官方)
  • AI辅助开发新思路:让快马AI帮你打造智能版网站故障诊断助手
  • 3步拯救机械键盘:告别连击困扰的智能解决方案
  • Github Actions Schedule不准时?试试这个‘曲线救国’方案:用IFTTT或Cronhub免费触发workflow
  • 2026年饮料生产线设备推荐:廊坊市顶天轻工机械专业供应果酒/碳酸饮料生产线 - 品牌推荐官
  • 别再只用plot了!用Matlab的hilbert和envelope函数,3步搞定信号包络线分析
  • 2026年6月鞍山金价走高,老旧黄金、投资金条安全变现全科普 - 余生黄金回收
  • 线材摇摆测试:从原理到实战,提升连接器可靠性的设计指南
  • 哈尔滨严寒地区旋转门厂家实力排行:适配性与服务对比 - 奔跑123
  • 二极管热设计:从静态降额到电热耦合迭代模型的精确计算
  • 2025年彩钢琉璃瓦设备厂家推荐:泊头兴和机械琉璃瓦成型机全系供应 - 品牌推荐官
  • RAG范式迁移:查询分解、上下文锚定与自校正检索
  • 私有化本地 AI,Windows 平台 OpenClaw 功能详解与配置
  • 基于极化鲁棒阵列的稳健DOA估计:C-MUSIC与闭式算法详解
  • 别再手动复制了!用这个工具一键生成Markdown Emoji代码,效率翻倍
  • 2026年工业测控仪表推荐:上海肯阔科技在线密度计等全系测控产品解决方案 - 品牌推荐官
  • 电子工程师职业发展:技术专家与管理路径的深度解析与选择策略
  • 深度解析:如何彻底移除Windows系统预装的Microsoft Edge浏览器
  • 保姆级教程:用Python的TraCI接口控制SUMO交通仿真(附完整代码)
  • 贺州宝珀+宝玑+伯爵手表专业回收,26年精选回收店铺排行榜推荐 - 莘州文化
  • QQ音乐加密文件转换神器:qmc-decoder让你的音乐自由播放
  • 2026精选:北京活动搭建与舞美设计服务公司实力观察 - 品牌企业推荐师(官方)
  • 在职考研党必看:同济大学电子信息非全(专业课888)保姆级备考攻略与时间分配心得
  • 江苏名扬激光智能装备:紫铜/储能液冷板激光焊接机等设备专业供应商 - 品牌推荐官
  • Translumo:3个简单步骤让屏幕文字秒变你的母语
  • Meta智能眼镜嵌入人脸识别代码,隐私问题再引关注!
  • 广东鸿胜金属设备回收:专业的汕头废旧金属回收公司 - LYL仔仔
  • TranslucentTB完整指南:让你的Windows任务栏瞬间变透明✨
  • 2026海南企业经营公司工商变更全指南:不同类型、流程步骤及推荐TOP6代理财税机构公司 - GrowthUME
  • FPGA模块化设计利器:LogicLock区域规划与增量编译实战