如何正确格式化PDO结果? - 数字结果以字符串形式返回?

GDP*_*GDP 6 php json pdo restler

随着AJAX的相对新颖,现在刚刚开始学习PDO,ReSTler的额外水平让我完全厌恶.从建模样本Restler下面的代码,我不知道如何改变从什么PDO输出格式返回到什么Restler和Highcharts期待.

如何更改此代码以从当前格式获取所需格式?(结果通常是5K-10K记录,如果这是处理MySQL结果的一个因素.)

ReSTler API代码段:

$sql = "SELECT ....."
$this->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
try {
    $stmt = $this->db->query($sql);
    return $stmt->fetchAll();
} catch (PDOException $e) {
    throw new RestException(502, 'Listing History: ' . $e->getMessage());
}
Run Code Online (Sandbox Code Playgroud)

当前输出格式(包括不需要的列名称):

[
  {
    "chart_date": "1118966400000",
    "bandwidth": "10.01",
    "views": "101"
  },
  {
    "chart_date": "1119225600000",
    "bandwidth": "20.02",
    "views": "101"
  },
Run Code Online (Sandbox Code Playgroud)

期望的输出格式(数字和列名称):

[
  [
    1118966400000,
    10.01,
    101
  ],
  [
    1119225600000,
    20.02,
    202
  ],
Run Code Online (Sandbox Code Playgroud)

使用建议 编辑fetch(PDO::FETCH_NUM):

根据@Ricardo Lohmann的回答,我尝试了fetch(PDO :: FETCH_NUM),DID删除了列名,但所有返回的列似乎都是字符串,而不是数字,因为数据实际上是,所以试试这个,给我一个正确的数据类型 - 这是PDO单方面返回字符串的一部分吗?

while ($row = $stmt->fetch(PDO::FETCH_NUM)) {
    $array[$x][0] = intval( $row[0] );
    $array[$x][1] = intval( $row[1] );
    $array[$x][2] = intval( $row[2] );
    $x++;
}
return $array;
Run Code Online (Sandbox Code Playgroud)

lan*_*nzz 12

PDO::FETCH_NUM 是要走的路,虽然它并不意味着数字列将保持数字,但它只意味着你将获得一个索引数组而不是一个关联数组(因此,它只能完成列名的省略).

MySQL PDO驱动程序总是返回数字列的字符串,这是一个已知的错误,但不幸的是,PHP开发人员公然忽视的许多错误之一是"谢谢你,但这不是一个错误".

您可以强制json_encode将实际数字用于看起来像数字的值:( json_encode($data, JSON_NUMERIC_CHECK)自PHP 5.3.3起).