如何让 PDO::FETCH_ASSOC 将整数作为整数返回? [复制]
Posted
技术标签:
【中文标题】如何让 PDO::FETCH_ASSOC 将整数作为整数返回? [复制]【英文标题】:How can I get PDO::FETCH_ASSOC to return integers as integers? [duplicate] 【发布时间】:2020-05-09 01:21:11 【问题描述】: $fetchedData = $query->fetchAll(PDO::FETCH_ASSOC);
返回
0 = array [8]
candidate_id = "2"
candidate_name = "Christine Hill"
company_id = "1"
end_date = "2016-09-30"
home_city = "Salisbury"
job_id = "8"
skill_id = "3"
start_date = "2016-01-01"
虽然某些字段(candidate_id、company_id、job_id、skill_id)在 mysql 数据库中被声明为 int(11)
。
我想在 php 中将它们视为整数,并通过我的 AJAX 接口在 JSON 中返回它们。
我做错了吗?有什么方法可以避免 PHP 中的重复强制转换并让 PDO 返回与数据库中相同的类型?
【问题讨论】:
它是 PHP。你为什么在乎?如有必要,它会将它们作为数字处理。 如果您需要 JSON 中有数字 - 您可以在编码中使用JSON_NUMERIC_CHECK
。
查看@NigelRen 评论。 PHP DB 库总是返回字符串 AFAIK。
我唯一一次遇到这种需求是处理 xmlrpc 和一个严格的应用程序。刚结束在数据前往 xmlrpc 之前在数据上构建了一个 pre-caster。但值得庆幸的是 JSON 更好,JSON_NUMERIC_CHECK
做得很好(正如 Nigel 提到的)。
@tadman PDO 是,但 mysqlnd(通过 mysql 二进制协议)相反,对字段类型相当开明。 PDO 只是传达从他们那里得到的一切。
【参考方案1】:
在 MySQL 中,这些是等价的:
INSERT INTO t (job_id) VALUES("8");
INSERT INTO t (job_id) VALUES(8);
也就是说,引号是无害的。 most 其他 MySQL 上下文和 大多数 PHP 上下文也是如此。
对于 JSON,JSON 的接收者将如何处理该值?
当我必须把它变成一个数字时,这是一种简洁的方法。 (而且它足够神秘,足以成为读者的线索。)
$job_id = 0+$job_id;
【讨论】:
以上是关于如何让 PDO::FETCH_ASSOC 将整数作为整数返回? [复制]的主要内容,如果未能解决你的问题,请参考以下文章
Laravel 与 PDO::FETCH_ASSOC 类似的方法是啥?