PHP 与 MySQL
PHP 操作 MySQL 的现代方式是 PDO(PHP Data Objects),它支持预处理语句,能有效防止 SQL 注入,且兼容多种数据库。
基本流程
- 创建 PDO 连接(dsn、用户名、密码);
- 准备 SQL(prepare);
- 绑定参数并执行(execute);
- 获取结果(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 语法速查
常用条目速查,完整版见对应教程章节。可复制代码到在线运行中测试。
| 写法 / 语法 | 作用 |
|---|---|
<?php ... ?> | 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) | 写入文件 |