You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PHP MySQLi过程化方式获取行数及预处理语句中使用mysql_fetch_array()

解决MySQLi连接问题与过程化操作指南

看起来你重新捡起来Web开发技术时遇到了MySQLi的小麻烦,我来一步步帮你理清问题:

一、修复MySQLi数据库连接问题

你的连接代码片段没写完,先把完整的错误处理补全,同时排查常见的连接失败原因:

完整的连接代码示例

<?php
$db_host = "localhost";
$db_user = "root";
$db_pass = "";
$db_name = "testdatabase";

// 创建连接
$dbc = mysqli_connect($db_host, $db_user, $db_pass, $db_name);

// 检查连接(完整错误输出更利于排查)
if (!$dbc) {
    die("连接失败: " . mysqli_connect_error());
}
echo "数据库连接成功";
?>

常见连接失败排查点

  • 确认本地MySQL服务是否正在运行(比如XAMPP/WAMP的MySQL模块是否启动)
  • 检查root用户的密码是否正确(部分环境下root默认不是空密码,比如生产环境或某些集成包会默认设置密码)
  • 确认testdatabase数据库是否已经通过phpMyAdmin或命令行创建
  • 如果MySQL端口不是默认的3306,需要在连接时补充端口参数:mysqli_connect($db_host, $db_user, $db_pass, $db_name, 3307)(根据实际端口调整)

二、过程化方式获取行数

分普通查询和预处理语句两种场景:

1. 普通查询获取行数

执行普通SELECT查询后,直接用mysqli_num_rows()获取行数:

// 示例:查询users表的总行数
$query = "SELECT * FROM users";
$result = mysqli_query($dbc, $query);

if ($result) {
    $row_count = mysqli_num_rows($result);
    echo "表中总行数: " . $row_count;

    // 遍历结果集(用mysqli_fetch_array)
    while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
        echo "用户名: " . $row['username'];
    }

    // 释放结果集资源
    mysqli_free_result($result);
} else {
    echo "查询失败: " . mysqli_error($dbc);
}

2. 预处理语句获取行数

预处理语句需要先调用mysqli_stmt_store_result()把结果集存储到内存,才能用mysqli_stmt_num_rows()获取行数:

// 示例:预处理查询获取符合条件的行数
$stmt = mysqli_prepare($dbc, "SELECT * FROM users WHERE age > ?");
// 绑定参数("i"表示整数类型)
mysqli_stmt_bind_param($stmt, "i", $age);

$age = 18;
mysqli_stmt_execute($stmt);

// 必须先存储结果集,才能获取行数
mysqli_stmt_store_result($stmt);
$row_count = mysqli_stmt_num_rows($stmt);
echo "年龄大于18的用户数: " . $row_count;

// 关闭预处理语句
mysqli_stmt_close($stmt);

三、预处理语句中使用类似mysql_fetch_array()的方法

注意:mysql_fetch_array()是已废弃的旧MySQL扩展函数,MySQLi预处理语句中要获取数组格式的结果,需要先通过mysqli_stmt_get_result()拿到结果集对象,再用mysqli_fetch_array()遍历:

$stmt = mysqli_prepare($dbc, "SELECT id, username FROM users WHERE age > ?");
mysqli_stmt_bind_param($stmt, "i", $age);

$age = 18;
mysqli_stmt_execute($stmt);

// 获取结果集对象
$result = mysqli_stmt_get_result($stmt);

// 用mysqli_fetch_array遍历(MYSQLI_BOTH同时返回索引和关联数组,也可指定MYSQLI_ASSOC/MYSQLI_NUM)
while ($row = mysqli_fetch_array($result, MYSQLI_ASSOC)) {
    echo "ID: " . $row['id'] . ", 用户名: " . $row['username'];
}

// 释放资源
mysqli_free_result($result);
mysqli_stmt_close($stmt);

内容的提问来源于stack exchange,提问作者SShah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 08:27:32