# PHP 入门第九课:PHP + MySQL,第一次把数据真正存起来
程序运行时的数据可以放在变量里,但变量通常只存在于当前程序运行期间。
如果希望用户注册后,下次还能看到自己的数据,就需要数据库。
## MySQL 是什么?
MySQL 是常见的关系型数据库。
可以简单理解:
```text
PHP → 负责业务逻辑
MySQL → 负责保存数据
```
例如用户表:
```text
users
├── id
├── username
├── email
└── created_at
```
## PHP 如何连接 MySQL?
现代 PHP 项目常使用 PDO。
```php
$pdo = new PDO(
"mysql:host=127.0.0.1;dbname=test;charset=utf8mb4",
"root",
"password"
);
```
生产项目中不要把密码直接硬编码在公开代码里。
## 查询数据
```php
$stmt = $pdo->query(
"SELECT id, username FROM users"
);
$users = $stmt->fetchAll(
PDO::FETCH_ASSOC
);
```
然后:
```php
foreach ($users as $user) {
echo $user["username"];
}
```
## 插入数据
不要这样:
```php
$sql = "INSERT INTO users(username)
VALUES ('$username')";
```
因为用户输入直接拼进 SQL,会带来 SQL 注入风险。
应该使用预处理:
```php
$stmt = $pdo->prepare(
"INSERT INTO users(username) VALUES (?)"
);
$stmt->execute([$username]);
```
## 查询指定用户
```php
$stmt = $pdo->prepare(
"SELECT * FROM users WHERE id = ?"
);
$stmt->execute([$id]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);
```
## 更新
```php
$stmt = $pdo->prepare(
"UPDATE users SET username = ? WHERE id = ?"
);
$stmt->execute([$username, $id]);
```
## 删除
```php
$stmt = $pdo->prepare(
"DELETE FROM users WHERE id = ?"
);
$stmt->execute([$id]);
```
这就是最基本的 CRUD:
```text
Create 创建
Read 查询
Update 更新
Delete 删除
```
## 异常处理
开发阶段可以启用异常:
```php
$pdo = new PDO(
$dsn,
$user,
$password,
[
PDO::ATTR_ERRMODE =>
PDO::ERRMODE_EXCEPTION
]
);
```
出现数据库错误时,程序会抛出异常,更容易调试。
## 小结
PHP + MySQL 是非常经典的组合。
现在你已经可以完成:
```text
浏览器
↓
PHP
↓
MySQL
↓
返回结果
```
下一篇继续做一个非常常见的功能:登录。
- 点赞
- 收藏
- 关注作者
评论(0)