【问题标题】:PHP & OCI query returns NUMBER columns as STRINGPHP & OCI 查询返回 NUMBER 列作为 STRING
【发布时间】:2014-10-05 18:43:19
【问题描述】:

我在 Oracle 11g 中使用 PHP5 和 OCI 8。 当我使用oci_fetch_all 获取一行时,即使对于NUMBER 列,即使我在查询中使用Oracle 的TO_NUMBER,整个结果也会转换为STRING

我想要做的很简单:javascript 通过 Ajax 请求调用 PHP 脚本。该脚本只是获取一些NUMBER 数据并将它们编码为JSON。我希望将数据编码为整数,因此 javascript 可以对其进行数学运算(加法、除法等),而无需进行任何转换。

我很确定问题来自 OCI 而不是 JSON 编码,因为当我 VAR_DUMP oci_fetch_all 的结果时,我可以清楚地看到每个结果的双引号:

{
"COLUMN1":"12",
"COLUMN2":"52"
}

我希望结果如下所示:

{
"COLUMN1":12,
"COLUMN2":52
}

我尝试过:

  • 更改oci_fetch_all的标志(OCI_FETCHSTATEMENT_BY_ROWOCI_FETCHSTATEMENT_BY_COLUMN...)
  • 使用oci_fetch_array 而不是oci_fetch_all
  • 删除连接到 oracle 的 UTF8 编码(我知道,它很愚蠢)

奇怪的是,我在互联网上找不到任何关于这个问题的信息……好像没有人遇到过同样的问题。也许我做错了什么......

提前致谢

【问题讨论】:

    标签: php ajax numbers type-conversion oracle-call-interface


    【解决方案1】:

    您可以在 json_encode 中使用额外的选项:

    json_encode($rows, JSON_NUMERIC_CHECK);
    

    但是,此选项需要 5.3.3 或更高版本的 PHP 版本(因此对您来说没问题)。

    【讨论】:

    • 这仅在您希望转换所有个数值时才有效。我有想要作为字符串保留的电话号码(并且是数据库中的字符串),但我确实想要转换其他值......
    【解决方案2】:

    PHP 中的所有数据库扩展都是这样工作的,您对此无能为力。 您必须手动对数据库结果进行类型转换。

    【讨论】:

    • 为了扩展,我做了一些工作以使其更加精简,这样我就不必从 MySQL 中手动对 PHP 中的所有列进行类型转换。它涉及在我的页面顶部运行 DESCRIBE 语句,然后将值存储在具有 PHP 对应类型的数组中。这并不,但有点耗时。我的是 MySQL,但如果 OP 愿意,我可以发布我的代码。
    • 当然可以!那可能对我有帮助!谢谢大家
    猜你喜欢
    • 1970-01-01
    • 2017-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-11
    相关资源
    最近更新 更多