You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PDO fetchAll查询返回int类型字段为string类型的问题求助

PDO fetchAll返回int字段为string的解决办法

PDO默认会将所有数据库查询结果的字段以字符串类型返回,即便数据库中字段定义为int类型,这就是你遇到问题的原因。以下是几种解决方式:

方法一:修改PDO全局属性

初始化PDO连接时,添加两个关键属性,让PDO返回数据库原生数值类型:

$pdo = new PDO($dsn, $username, $password, [
    PDO::ATTR_STRINGIFY_FETCHES => false, // 禁止将数值字段转为字符串
    PDO::ATTR_EMULATE_PREPARES => false   // 关闭预处理语句模拟,确保上述设置生效
]);

设置完成后,再次执行fetchAll(PDO::FETCH_ASSOC),int类型字段会被正确识别为integer类型。

方法二:手动转换字段类型

如果不想修改全局PDO配置,可以在获取数据后,对目标字段进行强制类型转换:

$data = $this->QueryID->fetchAll(PDO::FETCH_ASSOC);
// 单个字段转换
$data[0]['Num'] = (int)$data[0]['Num'];
print_r(gettype($data[0]['Num'])); // 输出 integer

// 批量数据循环转换
foreach ($data as &$item) {
    $item['Num'] = (int)$item['Num'];
}
unset($item); // 释放引用避免后续问题

方法三:绑定字段类型(适合单条数据获取场景)

如果使用fetch()而非fetchAll(),可以通过bindColumn指定字段类型:

$stmt = $this->QueryID->prepare("SELECT Num FROM your_table");
$stmt->execute();
$stmt->bindColumn('Num', $num, PDO::PARAM_INT);
while ($stmt->fetch(PDO::FETCH_BOUND)) {
    print_r(gettype($num)); // 输出 integer
}

内容的提问来源于stack exchange,提问作者S.M_Emamian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 23:25:01