PHP 7 已经彻底移除了对 MySQL 扩展的支持,推荐使用 PDO 进行数据库操作,PDO(PHP Data Objects)是一种安全且高效的方法,可以连接和操作多种数据库。PDO 提供了一个统一的接口,用于执行 SQL 查询和操作数据库。
准备一张测试表(以 MySQL 为例)
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(50) NOT NULL,
`email` varchar(100) NOT NULL,
`age` int(3) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
PDO 数据库连接
<?php
// 数据库配置
$host = '127.0.0.1';
$dbname = 'test'; // 你的数据库名
$username = 'root'; // 数据库账号
$password = ''; // 数据库密码
$charset = 'utf8';
// PDO 连接字符串
$dsn = "mysql:host=$host;dbname=$dbname;charset=$charset";
// PDO 配置选项
$options = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION, // 开启异常错误模式
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC, // 默认返回关联数组
PDO::ATTR_EMULATE_PREPARES => false, // 关闭预处理模拟,防注入
];
try {
// 创建 PDO 实例
$pdo = new PDO($dsn, $username, $password, $options);
echo "数据库连接成功!<br>";
} catch (PDOException $e) {
// 捕获连接异常
die("数据库连接失败:" . $e->getMessage());
}
?>
增删改查完整操作
1. 新增数据(Create)
// SQL 语句(用 ? 占位符 或 :name 命名占位符)
$sql = "INSERT INTO users (username, email, age) VALUES (?, ?, ?)";
// 1. 预处理 SQL
$stmt = $pdo->prepare($sql);
// 2. 执行(传入参数数组)
$stmt->execute(['张三', 'zhangsan@test.com', 25]);
// 获取自增ID
$insertId = $pdo->lastInsertId();
echo "新增成功,ID:" . $insertId;
2.查询数据(Read)
(1)查询单条数据
$id = 1;
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id]);
// 获取单条结果
$user = $stmt->fetch();
if ($user) {
print_r($user);
} else {
echo "未找到数据";
}
(2)查询多条数据
$sql = "SELECT * FROM users WHERE age > ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([18]);
// 获取所有结果
$userList = $stmt->fetchAll();
foreach ($userList as $user) {
echo "ID:{$user['id']},用户名:{$user['username']}<br>";
}
3.更新数据(Update)
$sql = "UPDATE users SET username = ?, age = ? WHERE id = ?";
$stmt = $pdo->prepare($sql);
// 执行更新
$stmt->execute(['李四', 26, 1]);
// 获取受影响行数
$rowCount = $stmt->rowCount();
echo "更新成功,受影响行数:" . $rowCount;
4.删除数据(Delete)
$id = 1;
$sql = "DELETE FROM users WHERE id = ?";
$stmt = $pdo->prepare($sql);
$stmt->execute([$id]);
$rowCount = $stmt->rowCount();
echo "删除成功,受影响行数:" . $rowCount;
四、PDO事务处理(重要)
事务用于保证多条SQL要么全部成功,要么全部失败,保证数据一致性。
try {
// 开启事务
$pdo->beginTransaction();
// 执行多条SQL
$pdo->exec("INSERT INTO users (username, email) VALUES ('王五', 'wangwu@test.com')");
$pdo->exec("UPDATE users SET age = 30 WHERE username = '王五'");
// 提交事务
$pdo->commit();
echo "事务执行成功!";
} catch (PDOException $e) {
// 回滚事务
$pdo->rollBack();
echo "事务执行失败:" . $e->getMessage();
}
五、PDO关键知识点
1.两种占位符写法
①问号占位符(简单)
$sql = "INSERT INTO users (username, email) VALUES (?, ?)";
$stmt->execute(['张三', 'a@test.com']);
②命名占位符(清晰)
$sql = "INSERT INTO users (username, email) VALUES (:name, :mail)";
$stmt->execute([
':name' => '张三',
':mail' => 'a@test.com'
]);
2.防SQL注入
PDO预处理语句自动过滤危险字符,永远不要直接拼接变量到SQL里:
// 危险写法(SQL注入)
$sql = "SELECT * FROM users WHERE id = $id";
// 安全写法(预处理)
$sql = "SELECT * FROM users WHERE id = ?";
3.常用获取结果方法
fetch()→获取单条数据
fetchAll()→获取所有数据
rowCount()→获取受影响行数(增删改)
lastInsertId()→获取自增ID(新增)
本站原创内容,转载请注明来源:https://www.liutonghui.com/140.html
评论列表(1条)
新手学习一下
回复 dongwu:这是个简单案例,具体多看看手册的详细用法