PHP数据库开发从入门到实战,轻松搞定数据交互与API接口开发
面向PHP数据库开发零基础入门者、希望快速入门后端接口的开发者,采用从基础到落地API接口的清晰递进逻辑,开篇讲解PHP与MySQL、SQLite的安全连接方式,系统夯实增删改查(CRUD)数据交互核心,同步普及SQL注入防护、数据输入输出验证等规范;后半段结合常见小项目场景,手把手教读者构建标准PHP数据库API接口,助力轻松打通前后端数据链路。
PHP与数据库的不解之缘
在Web开发的世界里,“动态内容”是区别于静态网页的关键——从电商网站的商品列表、社交平台的用户动态,到博客系统的文章存储,都离不开数据的持久化存储与快速读取,而PHP作为流行的后端开发语言,与数据库的配合堪称“黄金搭档”:PHP负责处理业务逻辑,数据库负责存储和管理数据,二者结合才能构建出功能完整的动态网站。
无论你是刚接触PHP的新手,还是想巩固数据库交互技能的开发者,掌握PHP与数据库的连接、操作及安全实践,都是后端开发的必修功课。
PHP常用数据库盘点
PHP支持几乎所有主流数据库,其中最常用的有以下几种:
- MySQL/MariaDB:绝对的“国民数据库”,开源免费、性能优异、社区活跃,与PHP的兼容性最好,是中小型项目的首选。
- PostgreSQL:功能强大的开源关系型数据库,支持复杂查询和事务,适合对数据完整性要求高的项目。
- SQLite:轻量级文件型数据库,无需额外配置服务器,适合小型应用或原型开发(如移动端后端、本地工具)。
- MongoDB:非关系型数据库(NoSQL),适合存储结构化不强的数据(如日志、JSON格式数据),PHP也有对应的扩展支持。
本文将以MySQL为例展开讲解,毕竟它是PHP开发者最常用的数据库。
PHP连接数据库的主流方式
PHP连接MySQL主要有三种方式,但其中mysql扩展已在PHP 7.0中彻底废弃,因此我们只需掌握两种推荐方式:mysqli和PDO。
mysqli扩展(MySQL Improved)
mysqli是MySQL的增强版扩展,支持面向过程和面向对象两种写法,仅适用于MySQL数据库。
(1)面向过程写法(简单易上手)
<?php
// 数据库配置
$host = 'localhost'; // 数据库地址
$user = 'root'; // 数据库用户名
$pwd = 'your_password'; // 数据库密码
$dbname = 'test_db'; // 数据库名
// 1. 连接数据库
$conn = mysqli_connect($host, $user, $pwd, $dbname);
// 2. 检查连接是否成功
if (!$conn) {
die("连接失败:" . mysqli_connect_error());
}
// 3. 设置字符集(防止乱码)
mysqli_set_charset($conn, 'utf8mb4');
echo "连接成功!";
// 4. 关闭连接(可选,脚本结束时会自动关闭)
// mysqli_close($conn);
?>
(2)面向对象写法(更规范)
<?php
$host = 'localhost';
$user = 'root';
$pwd = 'your_password';
$dbname = 'test_db';
// 连接数据库
$conn = new mysqli($host, $user, $pwd, $dbname);
// 检查连接
if ($conn->connect_error) {
die("连接失败:" . $conn->connect_error);
}
// 设置字符集
$conn->set_charset('utf8mb4');
echo "连接成功!";
?>
PDO扩展(PHP Data Objects)
PDO是PHP的“数据库抽象层”,支持多种数据库(MySQL、PostgreSQL、SQLite等),代码可移植性强,且更安全。
<?php
$host = 'localhost';
$user = 'root';
$pwd = 'your_password';
$dbname = 'test_db';
try {
// 连接数据库(用try-catch处理异常)
$conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pwd);
// 设置PDO错误模式为异常
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
echo "连接成功!";
} catch(PDOException $e) {
die("连接失败:" . $e->getMessage());
}
?>
推荐优先用PDO:它不仅支持多数据库,还内置了更完善的安全机制,是现代PHP开发的主流选择。
安全第一:预防SQL注入的预处理语句
在操作数据库时,最常见的安全漏洞是SQL注入——攻击者通过构造恶意SQL语句,窃取或篡改数据。
如果你的查询语句是:
$id = $_GET['id']; $sql = "SELECT * FROM users WHERE id = $id";
攻击者若传入id=1 OR 1=1,就会查询出所有用户数据,非常危险。
而预处理语句(Prepared Statements) 能彻底解决这个问题:它先将SQL语句的“结构”和“数据”分离,数据会被当作纯文本处理,不会被解析为SQL命令。
PDO的预处理语句示例
<?php
// 假设已连接数据库,$conn是PDO对象
// 1. 准备SQL语句(用:name占位符)
$sql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$stmt = $conn->prepare($sql);
// 2. 绑定参数(数据会自动转义)
$username = '张三';
$email = 'zhangsan@example.com';
$stmt->bindParam(':username', $username);
$stmt->bindParam(':email', $email);
// 3. 执行语句
$stmt->execute();
echo "插入成功,新记录ID:" . $conn->lastInsertId();
?>
mysqli的预处理语句示例
<?php
// 假设已连接数据库,$conn是mysqli对象
// 1. 准备SQL语句(用?占位符)
$sql = "SELECT * FROM users WHERE id = ?";
$stmt = $conn->prepare($sql);
// 2. 绑定参数(i表示整数,s表示字符串,d表示小数,b表示二进制)
$id = 1;
$stmt->bind_param('i', $id);
// 3. 执行并获取结果
$stmt->execute();
$result = $stmt->get_result();
// 4. 遍历数据
while ($row = $result->fetch_assoc()) {
echo "用户名:" . $row['username'] . "<br>";
}
?>
实战演练:简单的用户数据管理
我们来做一个小功能:创建用户表、插入用户、查询用户列表,用PDO实现。
步骤1:先在MySQL中创建数据库和表
先手动执行以下SQL(或用phpMyAdmin):
CREATE DATABASE test_db;
USE test_db;
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL,
email VARCHAR(100) NOT NULL UNIQUE,
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
步骤2:PHP实现增查功能
<?php
// 数据库配置
$host = 'localhost';
$user = 'root';
$pwd = 'your_password';
$dbname = 'test_db';
try {
// 连接数据库
$conn = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $pwd);
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 1. 插入用户
$insertSql = "INSERT INTO users (username, email) VALUES (:username, :email)";
$insertStmt = $conn->prepare($insertSql);
$insertStmt->execute([
':username' => '李四',
':email' => 'lisi@example.com'
]);
echo "插入用户成功!<br>";
// 2. 查询所有用户
$selectSql = "SELECT * FROM users";
$selectStmt = $conn->prepare($selectSql);
$selectStmt->execute();
$users = $selectStmt->fetchAll(PDO::FETCH_ASSOC);
// 3. 显示用户列表
echo "<h3>用户列表:</h3>";
echo "<table border='1'>";
echo "<tr><th>ID</th><th>用户名</th><th>邮箱</th><th>创建时间</th></tr>";
foreach ($users as $user) {
echo "<tr>";
echo "<td>{$user['id']}</td>";
echo "<td>{$user['username']}</td>";
echo "<td>{$user['email']}</td>";
echo "<td>{$user['create_time']}</td>";
echo "</tr>";
}
echo "</table>";
} catch(PDOException $e) {
echo "错误:" . $e->getMessage();
}
?>
运行这个脚本,你就能看到用户插入成功,并在表格中显示用户列表啦!
PHP数据库开发最佳实践
- 永远不要用root用户连接PHP:创建一个权限仅为“增删改查”的专用数据库用户,降低风险。
- 错误信息不要暴露给用户:生产环境中,不要直接输出
mysqli_connect_error()或异常信息,应记录到日志文件中。 - 及时关闭连接(非必须但建议):虽然PHP脚本结束会自动关闭,但长时间运行的脚本(如队列)最好手动关闭。
- 统一字符集:数据库、表、PHP连接都用
utf8mb4(支持emoji),避免乱码。 - 避免频繁连接:可以用“单例模式”复用数据库连接,减少性能开销。
PHP与数据库的交互是后端开发的基础,核心在于“连接-操作-安全”三个环节,从本文的入门示例开始,你可以逐步尝试更复杂的功能:比如用户注册登录、数据分页查询、事务处理(确保多条SQL要么全部成功,要么全部失败)。
实践是最好的老师,动手写几个小项目,你就能快速掌握PHP数据库开发的精髓!
希望这篇文章能帮你开启PHP数据库开发的大门~ 有问题可以在评论区交流哦!

