PHP:MySQL数据库基础

1 什么是数据库?

数据库就像一个电子化的文件柜,用来存储数据。MySQL是最流行的开源数据库。

2 开启MySQL服务

默认配置:

  • 主机:localhost
  • 端口:3306
  • 用户名:root
  • 密码:root(或空)

3 使用 PDO 连接数据库(推荐)

PDO是PHP的数据库抽象层,支持多种数据库,安全且现代。

代码示例

<?php
$host = "localhost";
$dbname = "test";
$username = "root";
$password = "root";

try {
    // 连接数据库
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    echo "连接成功!";
} catch (PDOException $e) {
    die("连接失败:" . $e->getMessage());
}
?>

4 创建数据库和表

先创建一个测试数据库和表:

使用 phpMyAdmin

  1. 访问 http://localhost/phpmyadmin
  2. 新建数据库 test
  3. test 库里执行以下SQL创建表:
CREATE TABLE users (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age INT,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);

5 插入数据(INSERT)

代码示例

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

// 方式1:直接插入
$sql = "INSERT INTO users (name, age, email) VALUES ('小明', 18, 'xiaoming@example.com')";
$pdo->exec($sql);

// 方式2:预处理语句(推荐,更安全)
$stmt = $pdo->prepare("INSERT INTO users (name, age, email) VALUES (?, ?, ?)");
$stmt->execute(["小红", 20, "xiaohong@example.com"]);
$stmt->execute(["小刚", 22, "xiaogang@example.com"]);

echo "插入成功!";
?>

6 查询数据(SELECT)

代码示例

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

// 查询所有数据
$sql = "SELECT * FROM users";
$stmt = $pdo->query($sql);
$users = $stmt->fetchAll(PDO::FETCH_ASSOC);

echo "<table border='1'>";
echo "<tr><th>ID</th><th>姓名</th><th>年龄</th><th>邮箱</th></tr>";
foreach ($users as $user) {
    echo "<tr>";
    echo "<td>" . $user['id'] . "</td>";
    echo "<td>" . $user['name'] . "</td>";
    echo "<td>" . $user['age'] . "</td>";
    echo "<td>" . $user['email'] . "</td>";
    echo "</tr>";
}
echo "</table>";

// 条件查询
$stmt = $pdo->prepare("SELECT * FROM users WHERE age > ?");
$stmt->execute([18]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);
print_r($result);
?>

7 更新数据(UPDATE)

代码示例

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

// 更新小明的年龄
$stmt = $pdo->prepare("UPDATE users SET age = ? WHERE name = ?");
$stmt->execute([19, "小明"]);

echo "更新成功!影响行数:" . $stmt->rowCount();
?>

8 删除数据(DELETE)

代码示例

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

// 删除小刚
$stmt = $pdo->prepare("DELETE FROM users WHERE name = ?");
$stmt->execute(["小刚"]);

echo "删除成功!";
?>

9 完整示例:用户管理系统

users.php

<?php
$pdo = new PDO("mysql:host=localhost;dbname=test;charset=utf8", "root", "root");

// 处理添加
if (isset($_POST['add'])) {
    $stmt = $pdo->prepare("INSERT INTO users (name, age, email) VALUES (?, ?, ?)");
    $stmt->execute([$_POST['name'], $_POST['age'], $_POST['email']]);
}

// 处理删除
if (isset($_GET['delete'])) {
    $stmt = $pdo->prepare("DELETE FROM users WHERE id = ?");
    $stmt->execute([$_GET['delete']]);
}

// 查询所有用户
$users = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>用户管理</title>
</head>
<body>
    <h2>添加用户</h2>
    <form method="post">
        <input type="text" name="name" placeholder="姓名" required>
        <input type="number" name="age" placeholder="年龄">
        <input type="email" name="email" placeholder="邮箱">
        <button type="submit" name="add">添加</button>
    </form>

    <h2>用户列表</h2>
    <table border="1">
        <tr>
            <th>ID</th>
            <th>姓名</th>
            <th>年龄</th>
            <th>邮箱</th>
            <th>操作</th>
        </tr>
        <?php foreach ($users as $user): ?>
        <tr>
            <td><?= $user['id'] ?></td>
            <td><?= $user['name'] ?></td>
            <td><?= $user['age'] ?></td>
            <td><?= $user['email'] ?></td>
            <td><a href="?delete=<?= $user['id'] ?>">删除</a></td>
        </tr>
        <?php endforeach; ?>
    </table>
</body>
</html>

本章代码汇总

文件位置:examples/10-database.php

<?php
// 第10章完整示例(演示用,需要先建库建表)

echo "<h3>PDO数据库操作演示</h3>";
echo "<p>请先创建数据库 test 和表 users</p>";

$host = "localhost";
$dbname = "test";
$username = "root";
$password = "root";

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8", $username, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "<p style='color:green'>数据库连接成功!</p>";
    
    // 建表SQL(如果不存在)
    $createTable = "CREATE TABLE IF NOT EXISTS users (
        id INT AUTO_INCREMENT PRIMARY KEY,
        name VARCHAR(50) NOT NULL,
        age INT,
        email VARCHAR(100),
        created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
    )";
    $pdo->exec($createTable);
    echo "<p>users表已准备就绪</p>";
    
    // 演示插入
    $stmt = $pdo->prepare("INSERT INTO users (name, age, email) VALUES (?, ?, ?)");
    $stmt->execute(["张三", 25, "zhangsan@example.com"]);
    $stmt->execute(["李四", 30, "lisi@example.com"]);
    
    // 查询并显示
    $users = $pdo->query("SELECT * FROM users")->fetchAll(PDO::FETCH_ASSOC);
    echo "<h4>用户列表:</h4>";
    echo "<table border='1'>";
    echo "<tr><th>ID</th><th>姓名</th><th>年龄</th><th>邮箱</th></tr>";
    foreach ($users as $user) {
        echo "<tr>";
        echo "<td>{$user['id']}</td>";
        echo "<td>{$user['name']}</td>";
        echo "<td>{$user['age']}</td>";
        echo "<td>{$user['email']}</td>";
        echo "</tr>";
    }
    echo "</table>";
    
} catch (PDOException $e) {
    echo "<p style='color:red'>错误:" . $e->getMessage() . "</p>";
}
?>

本章小结

✅ 会用 PDO 连接数据库
✅ 会 INSERT 插入数据
✅ 会 SELECT 查询数据
✅ 会 UPDATE 更新数据
✅ 会 DELETE 删除数据

更多推荐