PHP5升级PHP7:mysql_field_name替换mysqli_fetch_fields失效求助
解决PHP7中mysql_field_name替换为mysqli_fetch_fields的适配问题
嗨,我之前从PHP5迁到PHP7的时候也踩过这个坑!mysql_field_name在PHP7里被彻底移除了,直接换成mysqli_fetch_fields肯定会出问题——这俩函数的返回逻辑完全不一样:前者是直接返回单个字段名,后者返回的是包含所有字段信息的对象数组。下面给你两种靠谱的替换方案:
方案1:用mysqli_fetch_fields获取所有字段后按索引取值
先拿到结果集的所有字段对象数组,再通过索引访问对应字段的name属性,和原逻辑最匹配:
原来的PHP5代码
// 假设已建立mysql连接 $result = mysql_query("SELECT id, username, email FROM users"); // 获取第1个字段的名称(索引从0开始) $firstFieldName = mysql_field_name($result, 0); echo $firstFieldName; // 输出 "id"
修改后的PHP7代码
// 假设已建立mysqli连接($conn是连接实例) $result = mysqli_query($conn, "SELECT id, username, email FROM users"); // 先获取所有字段的对象数组 $fields = mysqli_fetch_fields($result); // 按索引取对应字段的name属性 $firstFieldName = $fields[0]->name; echo $firstFieldName; // 同样输出 "id"
方案2:用mysqli_fetch_field_direct直接获取单个字段
如果你的场景只需要获取某一个字段的名称,没必要先拿整个字段数组,用mysqli_fetch_field_direct更高效,它可以直接按索引返回单个字段对象:
$result = mysqli_query($conn, "SELECT id, username, email FROM users"); // 直接获取第0个字段的对象,再取name属性 $firstFieldName = mysqli_fetch_field_direct($result, 0)->name; echo $firstFieldName; // 输出 "id"
额外注意点
- 确保
$result是有效的mysqli结果集,建议先判断$result !== false再操作,避免报错 - 如果用的是mysqli面向对象风格(比如
$conn->query()),代码可以改成:$result = $conn->query("SELECT id, username, email FROM users"); $fields = $result->fetch_fields(); $firstFieldName = $fields[0]->name; // 或者用fetch_field_direct $firstFieldName = $result->fetch_field_direct(0)->name;
这两种方案我都在项目里实际用过,完全能替代原来的mysql_field_name功能,你可以根据自己的代码场景选合适的~
内容的提问来源于stack exchange,提问作者Rflow
相关产品推荐
相关产品推荐

