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)"网上的功能,我确实得到了正确的数字转换,但在我看来,这是一个软糖,而不是一个解决方案。
关于如何让它在本地工作的任何想法?
答案 0 :(得分:2)
或者,您可以强制json_encode()
将字符串数转换为整数:
json_encode($objects, JSON_NUMERIC_CHECK);
答案 1 :(得分:1)
所以你必须确保在phpinfo()
的PDO部分下显示mysqlnd,并且PDO::ATTR_EMULATE_PREPARES
设置设置为FALSE
。
请注意,decimal
值将始终作为字符串返回,因为它们应始终如此。
答案 2 :(得分:-2)
优异。我仍然是PHP的新手,所以json_encode选项最适合我。