news 2026/6/17 11:16:29

PHP与MySQL交互最佳实践

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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就对了。预处理防止注入,事务保证一致性,索引提升性能。这些做好了,数据库层面基本没啥大问题。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/6 12:12:19

Android电视盒子技术演进与选购实战指南

1. 从移动端到客厅&#xff1a;Android机顶盒的野望与困境十多年前&#xff0c;当Android手机以摧枯拉朽之势席卷全球&#xff0c;从高端旗舰到千元入门机无处不在时&#xff0c;一个同样基于Android&#xff0c;但场景截然不同的产品——Android机顶盒&#xff0c;也开始在产业…

作者头像 李华
网站建设 2026/6/17 11:16:29

工业机器人模拟焊接工作站的构建

1 绪论1.1 研究背景与意义机器人焊接广泛应用于汽车、工程机械行业&#xff0c;离线仿真可在无实体设备条件下完成程序调试、轨迹优化&#xff0c;降低现场调试成本。结合课程项目化教学任务&#xff0c;采用 RobotStudio 搭建虚拟焊接工作站&#xff0c;掌握工作站搭建、离线轨…

作者头像 李华
网站建设 2026/6/6 12:05:32

从固话到5G承载网:PCM30/32(E1)这条‘老路’今天还在哪里跑?

从固话到5G承载网&#xff1a;PCM30/32&#xff08;E1&#xff09;这条‘老路’今天还在哪里跑&#xff1f;走进任何一座运营商的传统传输机房&#xff0c;你依然能看到一排排标着"E1"字样的接口板卡安静地闪烁着指示灯。这种诞生于上世纪60年代的数字传输标准&#…

作者头像 李华
网站建设 2026/6/6 11:49:55

高效智能CSDN博客下载器:三步打造你的专属离线知识库

高效智能CSDN博客下载器&#xff1a;三步打造你的专属离线知识库 【免费下载链接】CSDNBlogDownloader 项目地址: https://gitcode.com/gh_mirrors/cs/CSDNBlogDownloader 在信息爆炸的时代&#xff0c;CSDN博客下载器为你提供一站式解决方案&#xff0c;让你轻松将CSD…

作者头像 李华
网站建设 2026/6/6 11:47:08

告别迷茫!ISE 14.7 完整设计流程保姆级指南:从VHDL代码到FPGA烧录

ISE 14.7实战&#xff1a;从零构建FPGA数码管计数器全流程解析第一次打开ISE 14.7时&#xff0c;那个布满未知图标的界面确实让人望而生畏。作为Xilinx经典的FPGA开发环境&#xff0c;它承载了无数工程师的"第一次烧录"记忆。本文将用最接地气的方式&#xff0c;带你…

作者头像 李华