本地正常网站迁移至主机后出现mysqli_result::fetch_column()未定义错误
解决 mysqli_result::fetch_column() 未定义的报错问题
问题原因
fetch_column() 是PHP 8.1及以上版本才新增的mysqli结果集方法,你的正式主机PHP版本低于8.1,因此找不到该方法;而本地环境使用的是高版本PHP,所以运行正常。
解决方案
有两种处理方式,可根据实际情况选择:
升级正式主机的PHP版本
直接联系主机服务商,将PHP版本升级到8.1或更高,即可和本地环境一致,直接使用fetch_column()方法。改用低版本兼容的写法
如果暂时无法升级PHP,可替换fetch_column()为低版本支持的写法,同时必须修复原代码的SQL注入漏洞(原代码直接拼接用户输入到SQL中,存在极高安全风险),优化后的代码如下:
$users = $_POST["usernameInput"]; // 使用预处理语句避免SQL注入 $stmt = $baglanti->prepare("SELECT COUNT(*) FROM users WHERE username = ?"); $stmt->bind_param("s", $users); $stmt->execute(); // 兼容低版本PHP的结果获取方式 $result = $stmt->get_result(); $sonuc = $result->fetch_row()[0]; // 替代fetch_column(),取第一行第一列的值 if($sonuc == 0) { $username = $users; } else { $username_err = "This username has been used before!"; } $stmt->close();
补充说明
- 原代码用
SELECT *查询所有字段完全没必要,仅查询COUNT(*)就能判断用户名是否存在,效率更高。 - 预处理语句是防范SQL注入的标准做法,务必替换直接拼接用户输入的写法,避免网站被攻击。
内容的提问来源于stack exchange,提问作者Ferb
相关产品推荐
相关产品推荐

