数字转换为PHP和PDO到MYSQL的字符串

时间:2016-02-09 10:14:59

标签: php mysql mysqli pdo

Iam使用PHP(5.6.8)充当MySQL数据库之间的中间层并以JSON格式返回结果。

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

我设置连接参数" ATTR_STRINGIFY_FETCHES"是假的,但没有任何区别。例如$ 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)"网上的功能,我确实得到了正确的数字转换,但在我看来,这是一个软糖,而不是一个解决方案。

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

3 个答案:

答案 0 :(得分:2)

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

json_encode($objects, JSON_NUMERIC_CHECK);

答案 1 :(得分:1)

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

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

请注意,decimal值将始终作为字符串返回,因为它们应始终如此。

答案 2 :(得分:-2)

优异。我仍然是PHP的新手,所以json_encode选项最适合我。