🤖 AI智能摘要
暂未配置
前言
前面我们使用 txt 文本保存数据,但是数据量大之后,文本文件查询、修改都很不方便。网站正式开发几乎都会使用数据库存储数据,MySQL 是 PHP 搭配最多的数据库软件。本章学习 MySQL 基础语法以及 PHP 连接数据库,实现数据的增删改查,为制作登录、文章系统、留言系统打下基础。
一、数据库基本概念
- 数据库 (DataBase):存放数据的仓库,一个数据库里面可以有多张数据表。
- 数据表 (table):一张二维表格,由字段(列)和记录(行)组成。
- 字段:表格的列,例如 id、用户名、密码、昵称。
- 记录:表格当中的一行完整数据,也就是一条信息。
举个例子:user 用户表,字段有 id,username,password,nickname。每一个用户就是一条记录。
二、SQL 基础语句
SQL 是操作数据库的指令,大小写不敏感。
1. 创建数据库
CREATE DATABASE php_demo;2. 使用数据库
USE php_demo;3. 创建用户表 user
CREATE TABLE `user`(
id INT PRIMARY KEY AUTO_INCREMENT,
username VARCHAR(50) NOT NULL,
password VARCHAR(50) NOT NULL,
nickname VARCHAR(50)
)ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;说明:
id INT PRIMARY KEY AUTO_INCREMENT:id 主键,自动递增,每新增一条数据 id 自动 + 1VARCHAR(50)字符串类型,最多保存 50 个字符NOT NULL代表此字段不能为空utf8mb4完整 utf‑8 编码,可以保存中文、emoji 表情
4.INSERT 新增数据
向数据表插入一条记录
INSERT INTO user(username,password,nickname) VALUES ('admin','123456','管理员');5.SELECT 查询数据
查询整张表全部数据
SELECT * FROM user;只查询指定字段
SELECT username,nickname FROM user;WHERE 条件筛选,查询 id 等于 1 的用户
SELECT * FROM user WHERE id=1;按 id 倒序,最新的数据排在最前面
SELECT * FROM user ORDER BY id DESC;6.UPDATE 修改数据
注意:不加 WHERE 条件会修改表里全部数据,开发一定要小心!
UPDATE user SET nickname="超级管理员" WHERE id=1;7.DELETE 删除数据
不加 WHERE 会删除整张表所有记录,谨慎使用!
DELETE FROM user WHERE id=1;三、PHP 连接 MySQL(mysqli 面向过程)
连接数据库需要 4 项信息:数据库地址、数据库账号、数据库密码、数据库名称。
1. 连接数据库
<?php
$db_host = "127.0.0.1";
$db_user = "root";
$db_pwd = "root";
$db_name = "php_demo";
//建立连接
$conn = mysqli_connect($db_host,$db_user,$db_pwd,$db_name);
//判断连接是否失败
if(!$conn){
die("数据库连接失败:".mysqli_connect_error());
}
//设置数据库字符集
mysqli_set_charset($conn,"utf8mb4");
echo "数据库连接成功";
?>四、PHP 执行 SQL 语句
1. 插入数据 INSERT
<?php
$db_host = "127.0.0.1";
$db_user = "root";
$db_pwd = "root";
$db_name = "php_demo";
$conn = mysqli_connect($db_host,$db_user,$db_pwd,$db_name);
mysqli_set_charset($conn,"utf8mb4");
$sql = "INSERT INTO user(username,password,nickname) VALUES ('test','123456','测试账号')";
//执行sql
$res = mysqli_query($conn,$sql);
if($res){
echo "新增成功,新增记录id:".mysqli_insert_id($conn);
}else{
echo "新增失败:".mysqli_error($conn);
}
//关闭数据库连接
mysqli_close($conn);
?>2. 查询数据 SELECT
mysqli_fetch_assoc()读取一条记录,返回关联数组mysqli_fetch_all($res,MYSQLI_ASSOC)读取全部数据,返回二维数组
读取单条数据:
<?php
$conn = mysqli_connect("127.0.0.1","root","root","php_demo");
mysqli_set_charset($conn,"utf8mb4");
$sql = "SELECT * FROM user WHERE id=1";
$result = mysqli_query($conn,$sql);
$row = mysqli_fetch_assoc($result);
if($row){
echo "用户名:".$row["username"]."<br>";
echo "昵称:".$row["nickname"];
}else{
echo "没有找到这条数据";
}
mysqli_close($conn);
?>读取全部多条数据,配合 foreach 循环输出列表:
<?php
$conn = mysqli_connect("127.0.0.1","root","root","php_demo");
mysqli_set_charset($conn,"utf8mb4");
$sql = "SELECT * FROM user ORDER BY id DESC";
$result = mysqli_query($conn,$sql);
$list = mysqli_fetch_all($result,MYSQLI_ASSOC);
foreach($list as $v){
echo "ID:".$v["id"]." | 账号:".$v["username"]." | 昵称:".$v["nickname"]."<hr>";
}
mysqli_close($conn);
?>3. 修改数据 UPDATE
<?php
$conn = mysqli_connect("127.0.0.1","root","root","php_demo");
mysqli_set_charset($conn,"utf8mb4");
$sql = "UPDATE user SET nickname='修改后的昵称' WHERE id=2";
$res = mysqli_query($conn,$sql);
if($res){
echo "修改完成";
}else{
echo "修改失败:".mysqli_error($conn);
}
mysqli_close($conn);
?>4. 删除数据 DELETE
<?php
$conn = mysqli_connect("127.0.0.1","root","root","php_demo");
mysqli_set_charset($conn,"utf8mb4");
$sql = "DELETE FROM user WHERE id=2";
$res = mysqli_query($conn,$sql);
if($res){
echo "删除成功";
}else{
echo "删除失败";
}
mysqli_close($conn);
?>五、表单 + 数据库实战:简单用户登录
数据表 user 已经存在,编写登录表单,接收账号密码,和数据库比对。
登录表单 login.html
<form action="login.php" method="post">
账号:<input type="text" name="username"><br>
密码:<input type="password" name="password"><br>
<input type="submit" value="登录">
</form>登录处理 login.php
<?php
$username = trim($_POST["username"]);
$password = trim($_POST["password"]);
if(empty($username) || empty($password)){
echo "账号密码不能为空!";
exit;
}
$conn = mysqli_connect("127.0.0.1","root","root","php_demo");
mysqli_set_charset($conn,"utf8mb4");
$sql = "SELECT * FROM user WHERE username='$username' AND password='$password'";
$result = mysqli_query($conn,$sql);
$user = mysqli_fetch_assoc($result);
if($user){
echo "登录成功!欢迎你,".$user["nickname"];
}else{
echo "账号或者密码错误";
}
mysqli_close($conn);
?>六、SQL 注入风险(重要)
直接把用户输入拼接到 SQL 语句,会存在 SQL 注入漏洞,黑客可以非法获取、删除数据。
简单理解:用户输入特殊字符,篡改 SQL 语句。
正式项目禁止直接拼接用户提交的数据,应当使用预处理语句。
七、本章总结
- MySQL 数据库由数据库、数据表、字段、记录组成;
- 常用 SQL:INSERT 新增、SELECT 查询、UPDATE 修改、DELETE 删除;WHERE 用来条件筛选;
- mysqli\_connect () 实现 PHP 连接 MySQL,操作完成之后 mysqli\_close 关闭连接;
- mysqli\_fetch\_assoc 读取单条,mysqli\_fetch\_all 读取全部记录得到二维数组;
- 查询结果可以配合循环输出列表,结合表单可以实现登录注册等功能;
- 一定要注意 SQL 注入安全问题,不要直接拼接用户输入到 SQL 语句。
(注:部分内容可能由 AI 生成)