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
相关产品推荐
相关产品推荐

