按照网上的方法设置ATTR_EMULATE_PREPARES和ATTR_STRINGIFY_FETCHES这两个参数
$pdo = new PDO('sqlsrv:server=127.0.0.1,1433;database=jzdb2019', 'sa', '123456');
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
但是设置最后,结果集返回的依然元素全是string类型的数组
//var_dump打印
array(2){
“id”=>
string(3) "123",
"phone"=>
string(11) "13812345678"
}
然后试了几个网上的方法也不行,无奈利用json_encode和json_decode,这里JSON_NUMERIC_CHECK检测是否为数字,json_decode第二个参数设为true表示转为数组
$result = json_decode(json_encode($result,JSON_NUMERIC_CHECK ),true);
但随之问题来,数据库中原本的手机号码、qq等原本是用varchar存储,现在也会一并转为int
//var_dump打印
array(2){
“id”=>
int(123) ,
"phone"=>
string(13812345678)
}
这个方法不是最优解,将继续查找原因