【问题标题】:Prevent MySQL PDO from returning numbers as strings防止 MySQL PDO 将数字作为字符串返回
【发布时间】:2012-08-18 03:23:59
【问题描述】:

我正在使用 PHP 的 PDO 来查询 MySQL 数据库。它以字符串形式返回数字和整数,并弄乱了我的 JSON。

除了逐行类型转换值之外,还有更好的修复方法吗?

array(2) { 
  ["name"]=> string(11) "Preliminary" 
  ["sell_price"]=> string(6) "864.00"
} 

【问题讨论】:

  • 猜猜我不应该编辑主要信息!请注意,我使用的是 PHP 版本 5.3.14,而不是使用准备好的语句。
  • 你只是将结果数组传递给 json_encode() 吗?
  • 是的,我把结果传给json_encode(),然后jqPlot取数据做图。如果引用数字,结果会有所不同。
  • @databyss: false - 它支持数字类型:json.org
  • 这里的所有答案都是丑陋的黑客。有关正确的解决方案,请参阅this answer

标签: php mysql pdo


【解决方案1】:

如果您使用 php 5.3.3 或更高版本,您可以使用 JSON_NUMERIC_CHECK 作为 json_encode 的第二个参数来执行此操作。

见:http://us3.php.net/manual/en/function.json-encode.php

【讨论】:

  • 好答案。谢谢。但是请注意此警告,它描述了如何将“+33123456789”之类的电话号码转换为整数。 us3.php.net/manual/en/function.json-encode.php#106641
  • 这里的所有答案都是丑陋的黑客。有关正确的解决方案,请参阅this answer
  • JSON_NUMERIC_CHECK 在某些情况下不适合。就像一个给定的here。但是mysql驱动程序将整数作为字符串返回的原因是什么?有没有更好的办法!!
【解决方案2】:

虽然@Explosion Pills 在这种情况下可以满足@user1032531 的需求,但它并没有解决问题的第一个来源。

正如您在原始问题中看到的那样,在 PHP 方面,sell_price 的值已经是 string,尽管正如用户所说,它在数据库中存储为“数字”(我们不不知道是DECIMAL 还是FLOAT)。

好吧,当用户 @jameshfisher 在他的评论中指出,当使用 PDO 和 MySQL 时,可能需要适当的配置才能将“数字”作为“数字”。您可以关注his link,以获得使其正常运行所需的几乎一切。

除此之外,接受的答案是有效的,因为不使用 JSON_NUMERIC_CHECK json_encode 无论变量的类型如何,都会以文本形式发送所有内容,并且在使用它时会将值转换为基于类型猜测而不是原始变量的类型。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-06-17
    • 1970-01-01
    • 2019-12-15
    • 2012-12-18
    • 1970-01-01
    • 2014-10-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多