PHP MySQL 简介

PHP 与 MySQL 是 Web 开发中常用的组合,用于构建动态网站和应用程序。PHP 作为一种服务器端脚本语言,擅长处理逻辑和动态内容生成,而 MySQL 是一种开源的关系型数据库管理系统,用于存储和检索数据。以下是对 PHP 和 MySQL 交互的中文简介,涵盖基本概念、连接方式、常见操作和注意事项。


1. 什么是 PHP 和 MySQL?

  • PHP:一种广泛使用的服务器端脚本语言,适合处理表单、生成动态页面和与数据库交互。
  • MySQL:一个高效、开源的关系型数据库,存储数据以表的形式,支持 SQL 查询。
  • PHP + MySQL:PHP 通过内置扩展(如 mysqliPDO)与 MySQL 数据库交互,实现数据的增删改查(CRUD)。

2. 连接 MySQL 的方式

PHP 提供了三种主要方式与 MySQL 交互:

  1. mysqli 扩展(MySQL Improved):支持面向过程和面向对象编程,提供更高的安全性和性能。
  2. PDO 扩展(PHP Data Objects):一个数据库抽象层,支持多种数据库(如 MySQL、PostgreSQL),适合跨数据库项目。
  3. 已废弃的 mysql_ 函数:PHP 7 完全移除 mysql_ 函数,因其不安全,切勿使用。

2.1 使用 mysqli 连接 MySQL

<?php
$host = 'localhost';
$user = 'root';
$password = 'password';
$database = 'mydb';

// 创建连接
$mysqli = new mysqli($host, $user, $password, $database);

// 检查连接
if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}
echo "连接成功";
?>

2.2 使用 PDO 连接 MySQL

<?php
$host = 'localhost';
$dbname = 'mydb';
$user = 'root';
$password = 'password';

try {
    $pdo = new PDO("mysql:host=$host;dbname=$dbname", $user, $password);
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "连接成功";
} catch (PDOException $e) {
    die("连接失败: " . $e->getMessage());
}
?>

3. 常见数据库操作

以下是使用 mysqliPDO 实现的基本 CRUD 操作示例。

3.1 查询数据(SELECT)

  • mysqli
<?php
$result = $mysqli->query("SELECT id, name FROM users");
while ($row = $result->fetch_assoc()) {
    echo "ID: {$row['id']}, Name: {$row['name']}<br>";
}
$result->free();
?>
  • PDO
<?php
$stmt = $pdo->query("SELECT id, name FROM users");
while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
    echo "ID: {$row['id']}, Name: {$row['name']}<br>";
}
?>

3.2 插入数据(INSERT)

  • mysqli(预处理语句):
<?php
$stmt = $mysqli->prepare("INSERT INTO users (name, email) VALUES (?, ?)");
$stmt->bind_param("ss", $name, $email);
$name = "张三";
$email = "zhangsan@example.com";
$stmt->execute();
$stmt->close();
?>
  • PDO(预处理语句):
<?php
$stmt = $pdo->prepare("INSERT INTO users (name, email) VALUES (:name, :email)");
$stmt->execute(['name' => '张三', 'email' => 'zhangsan@example.com']);
?>

3.3 更新数据(UPDATE)

  • mysqli
<?php
$stmt = $mysqli->prepare("UPDATE users SET name = ? WHERE id = ?");
$stmt->bind_param("si", $name, $id);
$name = "李四";
$id = 1;
$stmt->execute();
$stmt->close();
?>
  • PDO
<?php
$stmt = $pdo->prepare("UPDATE users SET name = :name WHERE id = :id");
$stmt->execute(['name' => '李四', 'id' => 1]);
?>

3.4 删除数据(DELETE)

  • mysqli
<?php
$stmt = $mysqli->prepare("DELETE FROM users WHERE id = ?");
$stmt->bind_param("i", $id);
$id = 1;
$stmt->execute();
$stmt->close();
?>
  • PDO
<?php
$stmt = $pdo->prepare("DELETE FROM users WHERE id = :id");
$stmt->execute(['id' => 1]);
?>

4. 安全性和最佳实践

  1. 使用预处理语句
  • 防止 SQL 注入攻击,避免直接拼接用户输入到 SQL 查询中。
  • 预处理语句(如 mysqli::preparePDO::prepare)会自动转义输入。
  1. 错误处理
  • 使用 try-catch(PDO)或检查 $mysqli->error 来捕获和处理数据库错误。
   try {
       $pdo->query("INVALID SQL");
   } catch (PDOException $e) {
       echo "错误: " . $e->getMessage();
   }
  1. 连接管理
  • 在操作完成后关闭连接(mysqli::close() 或设置 $pdo = null)。
  • 使用持久连接(mysqli::persistent 或 PDO 的 ATTR_PERSISTENT)时需谨慎,避免连接泄漏。
  1. 字符编码
  • 确保 PHP 和 MySQL 使用相同的字符集(如 UTF-8),避免中文乱码。
   $mysqli->set_charset("utf8mb4");
   // 或 PDO
   $pdo = new PDO("mysql:host=$host;dbname=$dbname;charset=utf8mb4", $user, $password);

5. 实际应用场景

  1. 动态网站
  • 构建用户注册、登录系统,存储用户信息到 MySQL。
  • 显示动态内容,如文章列表或产品目录。
  1. API 开发
  • 从 MySQL 获取数据,编码为 JSON 响应给前端。
   header('Content-Type: application/json');
   $stmt = $pdo->query("SELECT * FROM users");
   $data = $stmt->fetchAll(PDO::FETCH_ASSOC);
   echo json_encode($data, JSON_UNESCAPED_UNICODE);
  1. 数据管理
  • 实现后台管理界面,支持数据的增删改查。
  1. 性能优化
  • 使用索引和优化 SQL 查询,提升大型数据集的查询效率。

6. 注意事项

  1. 避免使用 mysql_ 函数
  • PHP 7 已移除 mysql_ 函数,必须使用 mysqliPDO
  1. 选择 mysqliPDO
  • mysqli:适合专注于 MySQL 的项目,简单直接。
  • PDO:适合需要跨数据库支持或更现代化开发的场景。
  1. 安全性
  • 始终使用预处理语句处理用户输入。
  • 限制数据库用户的权限,仅授予必要操作(如 SELECTINSERT)。
  1. 性能
  • 对大数据量操作,使用批量插入或事务(BEGINCOMMIT)提高效率。
   $pdo->beginTransaction();
   $stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
   foreach (['张三', '李四'] as $name) {
       $stmt->execute(['name' => $name]);
   }
   $pdo->commit();

7. 总结

PHP 与 MySQL 的结合为 Web 开发提供了强大的数据处理能力。通过 mysqliPDO,开发者可以安全、高效地执行数据库操作。使用预处理语句、错误处理和字符集配置等最佳实践,能显著提升应用的安全性和可靠性。PHP 和 MySQL 适用于从简单博客到复杂电商系统的各种场景,是 Web 开发的经典组合。

如果需要更具体的代码示例、某操作的详细讲解,或有其他问题,请告诉我!

类似文章

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注