PHP MySQL 简介(保姆级教程)

更新时间:

💡一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战(已更新的所有项目都能学习) / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新开坑项目:《Spring AI 项目实战》 正在持续爆肝中,基于 Spring AI + Spring Boot 3.x + JDK 21..., 点击查看 ;
  • 《从零手撸:仿小红书(微服务架构)》 已完结,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;演示链接: http://116.62.199.48:7070 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 90w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 3100+ 小伙伴加入学习 ,欢迎点击围观

前言

在 Web 开发领域,PHP 与 MySQL 是一对经典的组合,它们共同构建了无数动态网站和应用程序的基础架构。PHP(Hypertext Preprocessor)作为服务器端脚本语言,擅长处理业务逻辑;而 MySQL 作为关系型数据库管理系统,负责高效存储和管理数据。两者的结合,如同“大脑”与“记忆体”的协同工作,让开发者能够快速搭建功能丰富的 Web 应用。本文将从零开始,逐步解析 PHP 与 MySQL 的核心概念、协作方式,并通过实际案例帮助读者理解这一组合的实战应用。


PHP:动态 Web 的核心语言

PHP 是一种开源的脚本语言,最初设计用于生成动态网页内容。它通过嵌入 HTML 中的方式运行,使得服务器能够根据用户请求动态生成页面。例如,用户提交表单后,PHP 可以处理输入数据、验证逻辑,甚至与数据库交互。

PHP 的核心特性

  1. 嵌入式设计:PHP 代码可以直接嵌入到 HTML 中,简化页面开发流程。
    <h1>欢迎,<?php echo $_POST['username']; ?></h1>  
    
  2. 服务器端执行:所有逻辑在服务器端完成,确保敏感操作(如数据库连接)不暴露给客户端。
  3. 开源与社区支持:庞大的开发者社区提供了丰富的框架(如 Laravel、Symfony)和扩展库。

PHP 的典型应用场景

  • 用户注册与登录系统
  • 动态内容生成(如新闻列表、商品详情页)
  • 表单数据处理与验证

MySQL:数据存储的基石

MySQL 是全球最受欢迎的关系型数据库之一,它通过表格(Table)组织数据,并通过 SQL(Structured Query Language)语言进行操作。其核心优势在于高效的数据管理和复杂的查询能力。

MySQL 的核心概念

1. 数据库与表

数据库是数据的集合,而表是存储数据的具体单元。例如,一个电商网站的数据库可能包含 users(用户表)、products(商品表)等。

2. SQL 的基本操作

  • 创建表:定义字段和约束。
    CREATE TABLE users (  
      id INT AUTO_INCREMENT PRIMARY KEY,  
      username VARCHAR(50) NOT NULL UNIQUE,  
      email VARCHAR(100) NOT NULL,  
      created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
    );  
    
  • 增删改查(CRUD)
    • INSERT:插入新数据。
      INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');  
      
    • SELECT:查询数据。
      SELECT * FROM users WHERE username = 'alice';  
      
    • UPDATE:更新数据。
      UPDATE users SET email = 'new@example.com' WHERE id = 1;  
      
    • DELETE:删除数据。
      DELETE FROM users WHERE id = 1;  
      

3. 关系与约束

通过 FOREIGN KEY 定义表与表之间的关系。例如,订单表 orders 可以通过 user_id 关联到用户表 users


PHP 与 MySQL 的协作:连接与交互

PHP 通过扩展(如 mysqliPDO)与 MySQL 建立连接,实现数据的读写操作。这一过程类似于“快递员”(PHP)与“仓库”(MySQL)之间的沟通:PHP 负责传递指令(SQL 查询),而 MySQL 负责处理并返回结果。

连接 MySQL 的步骤

  1. 安装环境:确保服务器已安装 PHP 和 MySQL,并配置好 php.ini 文件。
  2. 建立连接:使用 mysqliPDO 创建连接。
    // 使用 mysqli 连接  
    $conn = new mysqli('localhost', 'username', 'password', 'database_name');  
    if ($conn->connect_error) {  
      die("连接失败: " . $conn->connect_error);  
    }  
    
  3. 执行 SQL 语句:通过连接对象发送查询。
    $sql = "SELECT * FROM users WHERE id = 1";  
    $result = $conn->query($sql);  
    if ($result->num_rows > 0) {  
      // 处理结果  
    }  
    
  4. 关闭连接:操作完成后释放资源。
    $conn->close();  
    

安全性实践:防止 SQL 注入

直接拼接用户输入可能导致 SQL 注入攻击。使用预处理语句(Prepared Statements)可有效防范此类风险。

$stmt = $conn->prepare("INSERT INTO users (username, email) VALUES (?, ?)");
$stmt->bind_param("ss", $username, $email); // "ss" 表示两个字符串参数  
$stmt->execute();  

实战案例:用户注册与登录系统

以下通过一个简单案例,演示如何用 PHP 和 MySQL 实现用户注册与登录功能。

步骤 1:创建数据库与表

CREATE DATABASE user_management;  
USE user_management;  

CREATE TABLE users (  
  id INT AUTO_INCREMENT PRIMARY KEY,  
  username VARCHAR(50) NOT NULL UNIQUE,  
  password_hash VARCHAR(255) NOT NULL,  
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP  
);  

步骤 2:编写注册功能

<?php  
// 连接数据库  
$conn = new mysqli('localhost', 'root', '', 'user_management');  

if ($_SERVER['REQUEST_METHOD'] === 'POST') {  
  $username = $_POST['username'];  
  $password = password_hash($_POST['password'], PASSWORD_DEFAULT);  

  // 预处理插入  
  $stmt = $conn->prepare("INSERT INTO users (username, password_hash) VALUES (?, ?)");
  $stmt->bind_param("ss", $username, $password);  
  if ($stmt->execute()) {  
    echo "注册成功!";  
  } else {  
    echo "注册失败:" . $stmt->error;  
  }  
  $stmt->close();  
}  

$conn->close();  
?>  

<!-- HTML 表单 -->  
<form method="POST">  
  用户名:<input type="text" name="username" required><br>  
  密码:<input type="password" name="password" required><br>  
  <button type="submit">注册</button>  
</form>  

步骤 3:实现登录验证

<?php  
session_start();  
$conn = new mysqli('localhost', 'root', '', 'user_management');  

if ($_SERVER['REQUEST_METHOD'] === 'POST') {  
  $username = $_POST['username'];  
  $password = $_POST['password'];  

  $stmt = $conn->prepare("SELECT * FROM users WHERE username = ?");  
  $stmt->bind_param("s", $username);  
  $stmt->execute();  
  $result = $stmt->get_result();  

  if ($user = $result->fetch_assoc()) {  
    if (password_verify($password, $user['password_hash'])) {  
      $_SESSION['user_id'] = $user['id'];  
      echo "登录成功!";  
    } else {  
      echo "密码错误!";  
    }  
  } else {  
    echo "用户不存在!";  
  }  
  $stmt->close();  
}  

$conn->close();  
?>  

<!-- HTML 表单 -->  
<form method="POST">  
  用户名:<input type="text" name="username" required><br>  
  密码:<input type="password" name="password" required><br>  
  <button type="submit">登录</button>  
</form>  

进阶主题:优化与扩展

1. 数据库索引(Index)

索引如同图书目录,能加速数据查询。例如,在 users 表的 username 字段添加索引:

ALTER TABLE users ADD INDEX idx_username (username);  

2. 事务(Transaction)

事务确保多个操作的原子性。例如,转账场景需保证“扣除 A 账户金额”和“增加 B 账户金额”同时成功或失败。

$conn->begin_transaction();  
try {  
  $stmt1 = $conn->prepare("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1");  
  $stmt1->execute();  

  $stmt2 = $conn->prepare("UPDATE accounts SET balance = balance + 100 WHERE user_id = 2");  
  $stmt2->execute();  
  $conn->commit();  
} catch (Exception $e) {  
  $conn->rollback();  
  echo "事务失败:" . $e->getMessage();  
}  

3. 连接池与性能优化

在高并发场景下,使用连接池(如 MySQLi 多连接)或缓存(如 Redis)可提升效率。


结论

PHP 与 MySQL 的结合,为开发者提供了一套灵活且强大的工具链。通过本文的讲解,读者应能理解两者的协作机制,并具备构建基础 Web 应用的能力。对于初学者而言,建议从简单案例入手,逐步深入学习框架(如 CodeIgniter)和最佳实践(如 MVC 模式)。随着技术栈的扩展,PHP MySQL 简介中提到的核心概念将成为构建复杂系统的坚实基础。

未来,随着 Web 开发需求的多样化,PHP 与 MySQL 的生态将持续演进。开发者需关注新版特性(如 PHP 8 的 JIT 编译器、MySQL 8 的 JSON 支持),并结合实际项目不断实践,以提升开发效率与代码质量。

最新发布