首页 / PHP 入门教程 / MySQL 插入与读取数据

PHP 入门教程

MySQL 插入与读取数据

本教程共 65 篇 · 第 51 篇 · 更新于 2026-07-24 · 约 8 分钟阅读

PHPPHP8MySQLINSERTSELECTPDOmysqli读取数据

51. MySQL 插入与读取数据

本节目标:掌握 INSERT INTOSELECT 语句,能够用 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。


小结

INSERTSELECT 是数据库操作的基础。PHP 中配合预处理语句(将在第 55 章详解),既安全又高效。


来源:参考了 runoob「PHP MySQL 插入/读取数据」、php-the-right-way,改写后所得。