插件窝 干货文章 php操作mysql数据库的扩展有哪些

php操作mysql数据库的扩展有哪些

支持 MySQLi 扩展 事务处 95    来源:    2025-03-16

在PHP中,操作MySQL数据库的扩展主要有以下几种:

  1. MySQL扩展(已弃用)

    • mysql:这是PHP早期版本中使用的MySQL扩展,但在PHP 5.5.0中被弃用,并在PHP 7.0.0中被移除。不建议在新项目中使用。
  2. MySQLi扩展

    • mysqli:MySQL Improved扩展,支持MySQL 4.1及以上版本。它提供了面向对象和面向过程两种编程接口,支持预处理语句、事务处理、多查询等功能。
    • 特点
      • 支持面向对象和面向过程两种编程风格。
      • 支持预处理语句,可以有效防止SQL注入。
      • 支持事务处理。
      • 支持多查询。
  3. PDO扩展

    • PDO:PHP Data Objects扩展,提供了一个数据访问抽象层,支持多种数据库(如MySQL、PostgreSQL、SQLite等)。PDO提供了一个统一的API来操作不同的数据库。
    • 特点
      • 支持多种数据库。
      • 提供统一的API,便于切换数据库。
      • 支持预处理语句,防止SQL注入。
      • 支持事务处理。
      • 支持命名参数绑定。
  4. MySQL Native Driver(mysqlnd)

    • mysqlnd:这是PHP 5.3.0引入的MySQL原生驱动,用于替代旧的libmysqlclient库。它提供了更好的性能和内存管理,并且是MySQLi和PDO扩展的默认驱动。
    • 特点
      • 更好的性能。
      • 更好的内存管理。
      • 支持压缩协议。
      • 支持SSL加密。

选择建议:

  • 如果你只需要操作MySQL数据库,并且希望使用更现代的API,推荐使用MySQLi扩展。
  • 如果你需要支持多种数据库,或者希望代码具有更好的可移植性,推荐使用PDO扩展。

示例代码:

MySQLi示例(面向对象风格):

<?php
$mysqli = new mysqli("localhost", "user", "password", "database");

if ($mysqli->connect_error) {
    die("连接失败: " . $mysqli->connect_error);
}

$sql = "SELECT id, name FROM users";
$result = $mysqli->query($sql);

if ($result->num_rows > 0) {
    while($row = $result->fetch_assoc()) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} else {
    echo "0 结果";
}

$mysqli->close();
?>

PDO示例:

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=database", "user", "password");
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    $stmt = $pdo->query("SELECT id, name FROM users");
    while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
        echo "id: " . $row["id"]. " - Name: " . $row["name"]. "<br>";
    }
} catch (PDOException $e) {
    echo "连接失败: " . $e->getMessage();
}
?>

总结:

  • MySQLiPDO 是当前推荐使用的扩展,具体选择取决于你的项目需求。
  • mysqlnd 是MySQLi和PDO的底层驱动,提供了更好的性能和功能支持。