【问题标题】:Numerics converted to a string with PHP and PDO to MYSQL使用 PHP 和 PDO 将数字转换为字符串到 MYSQL
【发布时间】:2016-05-19 06:38:55
【问题描述】:

我正在使用 PHP (5.6.8) 作为 MySQL 数据库和以 JSON 格式返回结果之间的中间层。

我们正在使用 PHP 扩展 (PDO) 来进行数据库交互,但注意到所有数值都作为字符串返回。数据库本身在 Linux 安装上运行,但在开发过程中,客户端和中间层都在 Windows 上运行。

我将连接参数“ATTR_STRINGIFY_FETCHES”设置为 false,但这没有任何区别。例如$dbConnection->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false);

这是我用来检索数据的 PHP 函数,它与 RESTful 接口绑定。

function getAllObjects() 
{
    $sql = "SELECT * FROM Tbl_Objects ORDER BY 1";
    try {
       $db = getDB();
       $stmt = $db->query($sql);  
       $objects = $stmt->fetchAll(PDO::FETCH_OBJ);
       $db = null;
       echo json_encode($objects);
    } catch(PDOException $e) {
       echo '{"error":{"text":'. $e->getMessage() .'}}'; 
    }
}

我也尝试了“mysqli”,但我得到了相同的结果,因为数值都被转换为字符串。如果我在网上使用“cast_query_results($rs)”函数,我确实可以正确转换数字,但在我看来,这更像是一个骗局,而不是一个解决方案。

关于如何让它在本地工作的任何想法?

【问题讨论】:

  • 如何将“数字”值作为字符串或 Int 输入 DB?
  • 数据库中的值是如何表示的?最终提供表结构。

标签: php mysql mysqli pdo


【解决方案1】:

或者,您可以强制json_encode() 将字符串数字转换为整数:

json_encode($objects, JSON_NUMERIC_CHECK);

【讨论】:

    【解决方案2】:

    Only when PDO is built upon mysqlnd and emulation mode is off, then PDO will return int and float values with respective types.

    因此,您必须确保 mysqlnd 显示在 phpinfo() 的 PDO 部分下,并且 PDO::ATTR_EMULATE_PREPARES 设置设置为 FALSE

    请注意,decimal 值将始终以字符串的形式返回,它们应该始终如此。

    【讨论】:

    • 谢谢,使用此代码为我工作。我是在与 PDO 建立连接后立即放置的: $pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
    【解决方案3】:

    非常好。我还是 PHP 新手,所以 json_encode 选项最适合我。

    【讨论】:

    • 请不要在答案中加上谢谢,你只会得到反对票。哎呀迟到了,顺便说一句,不是我的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-04-11
    • 1970-01-01
    • 2012-02-06
    • 2021-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多