MySQL PHP 语法(附带实例)
                           
天天向上
发布: 2025-02-17 23:59:09

原创
25 人浏览过

MySQL 与 PHP 结合使用非常常见,尤其是在开发基于数据库的 web 应用时。PHP 提供了多种方式与 MySQL 交互,主要包括 mysqliPDO。下面我将介绍如何使用这些方式与 MySQL 进行交互,并附带实例。

1. 使用 MySQLi 扩展

MySQLi(MySQL Improved)扩展是 PHP 中用于与 MySQL 数据库进行交互的接口,它支持面向对象和过程化两种风格。

连接数据库

<?php
// 面向过程方式
$connection = mysqli_connect("localhost", "username", "password", "database_name");
if (!$connection) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";

// 面向对象方式
$mysqli = new mysqli("localhost", "username", "password", "database_name");
if ($mysqli->connect_error) {
    die("Connection failed: " . $mysqli->connect_error);
}
echo "Connected successfully";
?>

执行查询

  • 查询数据
  <?php
  $query = "SELECT id, name FROM users";
  $result = mysqli_query($connection, $query);

  // 面向过程方式
  if ($result) {
      while ($row = mysqli_fetch_assoc($result)) {
          echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
      }
  } else {
      echo "Error: " . mysqli_error($connection);
  }

  // 面向对象方式
  if ($result = $mysqli->query($query)) {
      while ($row = $result->fetch_assoc()) {
          echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
      }
  } else {
      echo "Error: " . $mysqli->error;
  }
  ?>
  • 插入数据
  <?php
  $name = "John Doe";
  $query = "INSERT INTO users (name) VALUES ('$name')";
  if (mysqli_query($connection, $query)) {
      echo "New record created successfully";
  } else {
      echo "Error: " . mysqli_error($connection);
  }
  ?>

准备语句

准备语句用于防止 SQL 注入,它将 SQL 查询与数据分开处理。

<?php
$stmt = $mysqli->prepare("INSERT INTO users (name) VALUES (?)");
$stmt->bind_param("s", $name);  // "s" stands for string
$name = "Jane Doe";
$stmt->execute();
echo "New record created successfully";
$stmt->close();
?>

关闭连接

<?php
mysqli_close($connection);  // 过程化方式
$mysqli->close();  // 面向对象方式
?>

2. 使用 PDO(PHP Data Objects)扩展

PDO 是另一种与 MySQL(以及其他数据库)交互的方式,支持更多的数据库类型,并且提供了更为统一的接口。

连接数据库

<?php
try {
    $pdo = new PDO("mysql:host=localhost;dbname=database_name", "username", "password");
    // 设置 PDO 错误模式为异常
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    echo "Connected successfully";
} catch (PDOException $e) {
    echo "Connection failed: " . $e->getMessage();
}
?>

执行查询

  • 查询数据
  <?php
  $stmt = $pdo->query("SELECT id, name FROM users");
  while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
      echo "ID: " . $row["id"] . " - Name: " . $row["name"] . "<br>";
  }
  ?>
  • 插入数据
  <?php
  $stmt = $pdo->prepare("INSERT INTO users (name) VALUES (:name)");
  $stmt->bindParam(':name', $name);
  $name = "John Smith";
  $stmt->execute();
  echo "New record created successfully";
  ?>

事务处理

PDO 支持事务,可以用来确保多条 SQL 语句在同一个事务中执行。

<?php
try {
    $pdo->beginTransaction();
    $pdo->exec("INSERT INTO users (name) VALUES ('User 1')");
    $pdo->exec("INSERT INTO users (name) VALUES ('User 2')");
    $pdo->commit();
    echo "Transaction successful";
} catch (Exception $e) {
    $pdo->rollBack();
    echo "Failed: " . $e->getMessage();
}
?>

关闭连接

PDO 会在脚本结束时自动关闭数据库连接,无需显式关闭。


3. 常见错误处理与调试

  • MySQLi 错误处理
  • 过程化方式:
    php if (!$result) { echo "Error: " . mysqli_error($connection); }
  • 面向对象方式: if (!$result) { echo "Error: " . $mysqli->error; }
  • PDO 错误处理:可以通过设置 PDO::ATTR_ERRMODE 属性来启用异常模式,捕获并处理错误。
  try {
      $pdo = new PDO("mysql:host=localhost;dbname=database_name", "username", "password");
      $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  } catch (PDOException $e) {
      echo "Connection failed: " . $e->getMessage();
  }

4. 总结与选择

  • MySQLi 适用于只需要与 MySQL 数据库交互的应用程序,支持过程化和面向对象两种风格。
  • PDO 是更灵活且可扩展的选项,它支持多种数据库(MySQL、PostgreSQL、SQLite 等),并提供更一致的接口。

选择使用哪种扩展取决于项目的需求、数据库类型以及开发者的个人偏好。

发表回复 0

Your email address will not be published. Required fields are marked *