PHP 与 MySQL

PHP 教程 · 第 11 章 · 6 次浏览

PHP 操作 MySQL 的现代方式是 PDO(PHP Data Objects),它支持预处理语句,能有效防止 SQL 注入,且兼容多种数据库。

基本流程

  1. 创建 PDO 连接(dsn、用户名、密码);
  2. 准备 SQL(prepare);
  3. 绑定参数并执行(execute);
  4. 获取结果(fetch / fetchAll)。

关键点

  • 使用预处理语句 + 占位符,杜绝字符串拼接 SQL;
  • 设置异常模式 ERRMODE_EXCEPTION 便于错误处理;
  • 使用 utf8mb4 字符集支持中文与 emoji。

代码示例

<?php
// 连接数据库
$dsn = "mysql:host=localhost;dbname=test;charset=utf8mb4";
$user = "root";
$pass = "password";

try {
    $pdo = new PDO($dsn, $user, $pass, [
        PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
    ]);

    // 插入数据(预处理语句)
    $sql = "INSERT INTO users (name, email) VALUES (?, ?)";
    $stmt = $pdo->prepare($sql);
    $stmt->execute(["小王", "xiaowang@example.com"]);
    echo "插入成功,ID:" . $pdo->lastInsertId();

    // 查询数据
    $stmt = $pdo->query("SELECT * FROM users");
    $users = $stmt->fetchAll();

    foreach ($users as $u) {
        echo "<br>" . $u["name"] . " - " . $u["email"];
    }

    // 带参数查询(防注入)
    $stmt = $pdo->prepare("SELECT * FROM users WHERE id = ?");
    $stmt->execute([1]);
    $one = $stmt->fetch();
    echo "<br>用户1:" . $one["name"];

} catch (PDOException $e) {
    echo "数据库错误:" . $e->getMessage();
}
?>
📚 PHP 语法速查
常用条目速查,完整版见对应教程章节。可复制代码到在线运行中测试。
写法 / 语法作用
&lt;?php ... ?&gt;PHP 代码块标记
echo "hello";输出字符串
$name = "张三";变量(以 $ 开头,无需声明类型)
if ($x > 0) { } else { }条件判断
foreach ($arr as $k => $v) { }遍历数组(最常用)
for ($i = 0; $i < 10; $i++) { }计数循环
function fn($a) { return $a; }定义函数
array("a" => 1)关联数组(PHP 的"字典")
count($arr)数组长度
isset($x) / empty($x)变量是否存在 / 是否为空
$_GET["key"] / $_POST["key"]获取表单 / 查询参数
$_SESSION["user"]会话数据读写(需 session_start())
$_COOKIE["key"]读取 Cookie
header("Location: /index.php");页面跳转
mysqli_connect($host, $user, $pass, $db)连接 MySQL(旧接口,新项目用 PDO)
new PDO($dsn, $user, $pass)连接 MySQL(推荐,防 SQL 注入)
$stmt->prepare($sql)预处理语句(防 SQL 注入)
htmlspecialchars($str)HTML 转义(防 XSS)
strlen($s) / mb_strlen($s)字符串长度
explode(",", $s) / implode(",", $arr)字符串拆分 / 拼接
json_encode($arr) / json_decode($s)数组与 JSON 互转
include / require引入文件(require 报错即停)
date("Y-m-d H:i:s")当前时间格式化
$_FILES["file"]文件上传数据
file_put_contents($path, $data)写入文件