PHP 入门教程
MySQL 插入与读取数据
本教程共 65 篇 · 第 51 篇 · 更新于 2026-07-24 · 约 8 分钟阅读
PHPPHP8MySQLINSERTSELECTPDOmysqli读取数据
51. MySQL 插入与读取数据
本节目标:掌握
INSERT INTO和SELECT语句,能够用 PHP 向数据库写入数据并读取展示。
表创建好后,接下来学习插入数据和查询数据,这是 Web 开发中最频繁的操作。
1. 插入单条数据
INSERT INTO users (username, email, age)
VALUES ('张三', 'zhang@example.com', 25);
字段顺序与值顺序一一对应。如果为所有字段插入值,可省略字段名:
INSERT INTO users
VALUES (NULL, '李四', 'li@example.com', 30, NOW());
Note省略字段名时,必须按表的字段顺序提供所有值,容易出错。建议始终显式写出字段名。
2. 插入多条数据
INSERT INTO users (username, email, age) VALUES
('王五', 'wang@example.com', 28),
('赵六', 'zhao@example.com', 22),
('孙七', 'sun@example.com', 35);
一次插入多条,比循环单条插入效率更高。
3. PHP 插入数据
<?php
$pdo = new PDO('mysql:host=localhost;dbname=my_shop;charset=utf8mb4', 'root', '123456');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// 插入单条
$sql = "INSERT INTO users (username, email, age) VALUES (:username, :email, :age)";
$stmt = $pdo->prepare($sql);
$stmt->execute([
':username' => '张三',
':email' => 'zhang@example.com',
':age' => 25
]);
echo '新用户ID:' . $pdo->lastInsertId();
Tip
lastInsertId()获取自增主键的值,常用于插入后立即跳转到详情页。
4. 查询所有数据
SELECT * FROM users;
Note
*表示所有字段。生产环境中建议只查询需要的字段,减少网络传输和内存占用。
5. PHP 读取数据(mysqli)
<?php
$mysqli = new mysqli('localhost', 'root', '123456', 'my_shop');
$mysqli->set_charset('utf8mb4');
$result = $mysqli->query("SELECT id, username, email FROM users");
// fetch_assoc:返回关联数组
while ($row = $result->fetch_assoc()) {
echo "{$row['id']} - {$row['username']}<br>";
}
$result->free();
$mysqli->close();
mysqli 常用获取方式
| 方法 | 返回格式 |
|---|---|
fetch_assoc() | 关联数组 ['id' => 1] |
fetch_row() | 索引数组 [0 => 1] |
fetch_array() | 同时返回关联和索引数组 |
fetch_object() | 对象 $row->id |
fetch_all() | 所有行的二维数组 |
6. PHP 读取数据(PDO)
<?php
$pdo = new PDO('mysql:host=localhost;dbname=my_shop;charset=utf8mb4', 'root', '123456');
$pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$stmt = $pdo->query("SELECT id, username, email FROM users");
// fetch() 每次取一行
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
echo "{$row['id']} - {$row['username']}<br>";
}
// 或者一次性取全部
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);
PDO 常用获取模式
| 模式 | 说明 |
|---|---|
PDO::FETCH_ASSOC | 关联数组 |
PDO::FETCH_NUM | 索引数组 |
PDO::FETCH_BOTH | 关联+索引 |
PDO::FETCH_OBJ | 对象 |
PDO::FETCH_CLASS | 映射到指定类 |
7. 查询单行数据
<?php
$stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
if ($user) {
echo '用户名:' . $user['username'];
} else {
echo '用户不存在';
}
Tip明确只查一条记录时,记得
fetch()只取一行,不要用fetchAll()再取索引 0。
小结
INSERT 和 SELECT 是数据库操作的基础。PHP 中配合预处理语句(将在第 55 章详解),既安全又高效。
来源:参考了 runoob「PHP MySQL 插入/读取数据」、php-the-right-way,改写后所得。