如何让 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 类似的方法是啥?

PHP Json 编码 PDO::FETCH_ASSOC

带有 PDO::FETCH_ASSOC 的 foreach 循环,提供的参数无效

加入表时PDO fetch_assoc [重复]

Magento:将 PDO 结果转换为 Varien 对象

PHP PDO 将数组转换为不同的格式