zhangjingyu
…………
总结
你的 if($rs && !empty($guishu)) 判断完全没有问题。
真正的问题是:
从第三方获取归属地失败时,没有给默认值,导致空值入库
空值入库后,下次查询优先取到这条空记录(因为 ORDER BY id DESC)
代码看到是空记录,又去调用第三方,但可能还是失败,形成恶性循环
解决方案的核心:无论如何都要给 $guishudi 一个默认值(比如 '未知地区'),绝对不能允许空值或 null 插入数据库。
需要我帮你写完整的 utf8ToNumericEntities 函数吗?或者帮你优化整个IP归属地获取类?😊
“无论如何都要给 $guishudi 一个默认值(比如 '未知地区')那下次查询到近似的ip,归属地不就是返回“未知地区”吗”(引用内容)你说得太对了! 这是个致命问题!
如果给默认值 '未知地区' 入库,下次查询同IP段时:
数据库查到了记录($rs 有值)
$rs['ipfrom'] = '未知地区'
!empty('未知地区') 为 true
直接返回 '未知地区',不会再尝试获取真实归属地!
这样就会永远显示"未知地区",完全失去了自动获取的意义!
…………

