【问题标题】:How can I get PDO::FETCH_ASSOC to return integers as integers? [duplicate]如何让 PDO::FETCH_ASSOC 将整数作为整数返回? [复制]
【发布时间】: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 只是传达从他们那里得到的一切。

标签: php mysql pdo sqldatatypes


【解决方案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;

【讨论】:

    猜你喜欢
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 2013-02-27
    相关资源
    最近更新 更多