PHP while循环仅执行1次且mysqli_fetch_array参数异常问题求解
问题原因
你出现这个错误的核心原因是变量名冲突覆盖:
- 初始执行MySQL查询时,你把查询结果集存到了变量
$result中,这是一个mysqli_result类型的对象,用来给mysqli_fetch_array遍历用 - 但在while循环内部,执行第二个curl请求提交帖子数据的时候,你把curl的返回结果又赋值给了
$result:$result = curl_exec($ch);,这时候原来的MySQL结果集就被覆盖成了字符串类型的curl返回值 - 第一次循环执行完后,进入第二次循环调用
mysqli_fetch_array($result)的时候,$result已经是字符串了,不符合参数要求,直接报错终止循环
修复方案
只需要把循环内curl请求的返回值变量名改成其他不冲突的名字即可,比如改成$curl_result,修改对应两处代码:
- 把循环内的
$result = curl_exec($ch);改成$curl_result = curl_exec($ch); - 后面解析返回值的代码
$json = json_decode($result, true);同步改成$json = json_decode($curl_result, true);
另外还有一个隐藏的小问题:你用来统计循环次数的变量$i,在遍历hashtag的foreach循环里也被用作了键名变量foreach($variableAry as $i=>$var),同样会覆盖外层的计数$i,建议把foreach里的键名也改成其他名字比如$tag_key,避免计数错误。
修复后核心代码片段示例
// 前面的MySQL查询、curl配置代码保持不变 $curl_result = curl_exec($ch); // 修改变量名,避免覆盖MySQL结果集 if (curl_errno($ch)) { echo 'Error:' . curl_error($ch); } curl_close($ch); $json = json_decode($curl_result, true); // 同步修改解析的变量名 // 后续业务逻辑代码保持不变
内容的提问来源于stack exchange,提问作者Vidhi Sharma
相关产品推荐
相关产品推荐

