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

PHP中SQL查询无法返回表值但PhpMyAdmin可正常返回的问题

问题分析与解决方法

为什么返回1而不是ID?

你看到的1是mysqli_multi_query()函数的返回值——这个函数执行成功时返回布尔值true,PHP中直接输出布尔值true会被转换为字符串1;执行失败则返回false。它不会直接返回查询到的结果集,这就是你看不到ID的核心原因。

另外,你当前是单条查询场景,完全没必要用mysqli_multi_query()(该函数用于执行多条SQL语句),用mysqli_query()更适配。

正确获取ID的代码示例

基础写法(仍存在SQL注入风险)

$sql = "SELECT `ID` FROM `Users` WHERE `Username` = '$username' AND `Password` = '$password'";
echo $sql;
// 用mysqli_query执行单条查询
$result = mysqli_query($link, $sql);
// 检查查询是否成功且有匹配数据
if ($result && mysqli_num_rows($result) > 0) {
    // 获取一行数据的关联数组
    $user = mysqli_fetch_assoc($result);
    // 输出ID
    echo $user['ID'];
    // 存入会话变量
    $_SESSION['user_id'] = $user['ID'];
} else {
    echo "查询失败或无匹配用户";
}

安全写法(使用预处理语句避免SQL注入)

直接拼接用户输入到SQL语句中存在严重的SQL注入风险,强烈推荐使用预处理语句:

// 准备预处理语句模板
$stmt = mysqli_prepare($link, "SELECT `ID` FROM `Users` WHERE `Username` = ? AND `Password` = ?");
// 绑定参数("ss"表示两个参数均为字符串类型)
mysqli_stmt_bind_param($stmt, "ss", $username, $password);
// 执行语句
mysqli_stmt_execute($stmt);
// 获取结果集
$result = mysqli_stmt_get_result($stmt);
// 检查并提取数据
if ($result && mysqli_num_rows($result) > 0) {
    $user = mysqli_fetch_assoc($result);
    echo $user['ID'];
    $_SESSION['user_id'] = $user['ID'];
} else {
    echo "查询失败或无匹配用户";
}
// 关闭预处理语句
mysqli_stmt_close($stmt);

关于自增字段的疑问

ID是自增字段和当前问题无关,问题完全出在你对mysqli_multi_query()函数的使用误解,以及没有正确获取查询结果集。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 03:59:55