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
相关产品推荐
相关产品推荐

