mysqli查询flagged_threads表仅返回首条匹配数据如何处理
问题原因
- 单次调用
mysqli_fetch_assoc()只能获取结果集中的一行数据,函数内部指针会自动后移,你只调用了一次,自然只能拿到第一条匹配的threadID=2。 - 你的SQL语句存在语法错误:
WHERE userID = 'current_userID'是把current_userID作为固定字符串匹配,而非读取对应变量值,若实际用户ID是动态传入的,这个写法不仅可能匹配不到结果,还存在SQL注入风险。
修正方案
你可以通过循环读取结果集,或者调用一次性拉取全部结果的方法拿到所有匹配数据,同时建议用预处理语句规避SQL注入风险,参考代码如下:
// 替换为实际的当前用户ID变量 $current_userID = 1; // 预处理SQL避免注入 $stmt = mysqli_prepare($dbconnect, "SELECT threadID FROM flagged_threads WHERE userID = ?"); // 绑定参数,i表示传入的是整数类型 mysqli_stmt_bind_param($stmt, "i", $current_userID); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); // 方案1:循环遍历拿所有结果,兼容性最好 $flagged_aa = []; while ($row = mysqli_fetch_assoc($result)) { $flagged_aa[] = $row['threadID']; } // 方案2:PHP 5.3及以上版本支持的简化写法,一次性拉取后提取目标字段 // $flagged_aa = array_column(mysqli_fetch_all($result, MYSQLI_ASSOC), 'threadID');
执行后$flagged_aa就会返回你预期的[2, 3, 6]数组。
内容的提问来源于stack exchange,提问作者J. Bond
相关产品推荐
相关产品推荐

