有遇到过类似从MySQL数据库中,不需要用特定的类型转化,比如无需操作CAST和CONVERT就能得到查询的结果集全部是字符串的情况吗?
/**
* 获取系统中该月结算单数据
*
* @param $from
* @param $to
* @return array|CDbDataReader|mixed
*/
public function getTargetData($from, $to)
{
$res = $this->targetDb->createCommand("
SELECT
platform,
commission_product_total_amount,
bill_month,
refund_total_amount,
fee_settlement,
anchor_source,
fee_adjust_amount,
commission_product_number,
refund_sku_number,
bill_sn,
buyer_number,
commission_sku_total_amount,
fee_total_amount,
anchor_uid,
anchor_nickname
FROM `{$this->targetTable}`
WHERE bill_month = " . date('Ym', strtotime($from)) . "
")->queryAll();
$this->changeType($res);
return $res;
}
目前是做一次循环,觉得太过多余
/**
* 因接口返回值问题,造成数据类型不一致,比如返回的金额为字符或浮点格式,
* 但是mysql存储为整型等,故将mysql查询后的数据全部转为字符串
*
* @param array $list
*/
protected function changeType(&$list = [])
{
foreach ($list as &$value) {
foreach ($value as $key => $val) {
$value[$key] = strval($val);
}
}
}
天蓬老师2017-04-11 10:08:09
用PDO的话:PDO::ATTR_STRINGIFY_FETCHES
,例:
$pdo = new PDO('...');
$pdo->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true);
$stm = $pdo->prepare("select 1, 2.3, 'hello'");
$stm->execute();
$result = $stm->fetch(PDO::FETCH_NUM);
ringa_lee2017-04-11 10:08:09
Yii1框架是可以直接设置PDO属性的
$this->targetDb->setAttributes([PDO::ATTR_STRINGIFY_FETCHES, true]);
然后继续查询就可以得到完全的字符串描述,当然不般是不会有这种需求的,不推荐强制转化字段的类型。
[0]=>
array(15) {
["platform"]=>
string(6) "聚美"
["commission_product_total_amount"]=>
string(7) "3843.23"
["bill_month"]=>
string(6) "201701"
["refund_total_amount"]=>
string(7) "1552.06"
["fee_settlement"]=>
string(6) "192.16"
["anchor_source"]=>
string(0) ""
["fee_adjust_amount"]=>
string(4) "0.00"
["commission_product_number"]=>
string(2) "22"
["refund_sku_number"]=>
string(1) "8"
["bill_sn"]=>
string(14) "JS201701000001"
["buyer_number"]=>
string(2) "13"
["commission_sku_total_amount"]=>
string(7) "2291.17"
["fee_total_amount"]=>
string(6) "192.16"
["anchor_uid"]=>
string(9) "108619065"
["anchor_nickname"]=>
string(0) ""
}