PHP MySQL 读取数据
                           
天天向上
发布: 2025-03-22 00:10:56

原创
253 人浏览过

在 PHP 中读取 MySQL 数据可以使用 MySQLi 或 PDO 两种方式。读取数据通常是通过 SELECT 语句来从数据库中获取信息,然后显示或进一步处理。

以下是使用 MySQLiPDO 读取数据的详细示例。


1. 使用 MySQLi 读取数据

1.1 使用面向对象方式

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = new mysqli($servername, $username, $password, $dbname);

// 检查连接
if ($conn->connect_error) {
    die("连接失败: " . $conn->connect_error);
}

// 执行查询
$sql = "SELECT id, username, email FROM users";
$result = $conn->query($sql);

// 检查结果
if ($result->num_rows > 0) {
    // 输出每一行数据
    while($row = $result->fetch_assoc()) {
        echo "ID: " . $row["id"]. " - 用户名: " . $row["username"]. " - 邮箱: " . $row["email"]. "<br>";
    }
} else {
    echo "没有数据";
}

// 关闭连接
$conn->close();
?>

📌 解析

  • $conn->query($sql):执行 SQL 查询,返回一个结果集。
  • $result->num_rows:检查查询结果是否有数据。
  • $result->fetch_assoc():按行获取数据并返回关联数组。

1.2 使用过程化方式

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

// 创建连接
$conn = mysqli_connect($servername, $username, $password, $dbname);

// 检查连接
if (!$conn) {
    die("连接失败: " . mysqli_connect_error());
}

// 执行查询
$sql = "SELECT id, username, email FROM users";
$result = mysqli_query($conn, $sql);

// 检查结果
if (mysqli_num_rows($result) > 0) {
    // 输出每一行数据
    while($row = mysqli_fetch_assoc($result)) {
        echo "ID: " . $row["id"]. " - 用户名: " . $row["username"]. " - 邮箱: " . $row["email"]. "<br>";
    }
} else {
    echo "没有数据";
}

// 关闭连接
mysqli_close($conn);
?>

📌 解析

  • mysqli_query($conn, $sql):执行查询,返回结果集。
  • mysqli_num_rows($result):检查结果集中的行数。
  • mysqli_fetch_assoc($result):按行返回关联数组。

2. 使用 PDO 读取数据

PDO 提供了一种更加灵活和安全的方式来连接和操作数据库。它支持多种数据库类型,可以简化跨平台开发。

2.1 使用 PDO 读取数据

<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "my_database";

try {
    // 创建 PDO 连接
    $pdo = new PDO("mysql:host=$servername;dbname=$dbname", $username, $password);
    // 设置错误模式
    $pdo->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);

    // 执行查询
    $sql = "SELECT id, username, email FROM users";
    $stmt = $pdo->query($sql);

    // 检查结果
    if ($stmt->rowCount() > 0) {
        // 输出每一行数据
        while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) {
            echo "ID: " . $row['id'] . " - 用户名: " . $row['username'] . " - 邮箱: " . $row['email'] . "<br>";
        }
    } else {
        echo "没有数据";
    }
} catch (PDOException $e) {
    echo "错误: " . $e->getMessage();
}

// 关闭连接
$pdo = null;
?>

📌 解析

  • $pdo->query($sql):执行 SQL 查询并返回一个 PDOStatement 对象。
  • $stmt->rowCount():检查结果集的行数。
  • $stmt->fetch(PDO::FETCH_ASSOC):按行返回关联数组。

3. 读取数据时的常见问题与注意事项

3.1 SQL 查询结果为空

  • 问题:如果查询没有找到任何数据,可能会返回空结果集。
  • 解决方法:检查 num_rowsrowCount(),并根据需要输出“没有数据”或处理空结果的逻辑。

3.2 防止 SQL 注入

  • 如果查询中包含用户输入(如用户名或邮箱),要使用预处理语句来防止 SQL 注入。使用 预处理语句 绑定参数是最安全的方法。

3.3 绑定参数

  • 在使用预处理语句时,确保绑定正确的数据类型参数,尤其是字符串、整数和布尔值。

3.4 分页查询

当查询结果过多时,可以使用 LIMIT 来限制返回的记录数,从而实现分页功能。

$sql = "SELECT id, username, email FROM users LIMIT 10 OFFSET 0"; // 获取前 10 条记录
  • LIMIT 指定了返回记录的数量。
  • OFFSET 指定了查询的起始位置。

总结

方法连接类型安全性性能
MySQLi面向对象、过程化
PDO面向对象

无论是 MySQLi 还是 PDO,读取数据的过程都非常相似。最重要的是使用 预处理语句 来防止 SQL 注入,确保数据安全。如果你在选择数据库驱动时没有明确的偏好,PDO 提供了更广泛的数据库支持,适合跨平台开发。

更多详细内容请关注其他相关文章!

发表回复 0

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