🤖 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 自动 + 1
  • VARCHAR(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 语句。

正式项目禁止直接拼接用户提交的数据,应当使用预处理语句。

七、本章总结

  1. MySQL 数据库由数据库、数据表、字段、记录组成;
  2. 常用 SQL:INSERT 新增、SELECT 查询、UPDATE 修改、DELETE 删除;WHERE 用来条件筛选;
  3. mysqli\_connect () 实现 PHP 连接 MySQL,操作完成之后 mysqli\_close 关闭连接;
  4. mysqli\_fetch\_assoc 读取单条,mysqli\_fetch\_all 读取全部记录得到二维数组;
  5. 查询结果可以配合循环输出列表,结合表单可以实现登录注册等功能;
  6. 一定要注意 SQL 注入安全问题,不要直接拼接用户输入到 SQL 语句。
(注:部分内容可能由 AI 生成)