如何关闭mysqli_result :: fetch_assoc()的转换行为?

时间:2018-09-04 15:01:04

标签: php mysqli pdo

您可以看到PDO准备语句与MySQLi语句的输出。现在的问题是$ stmt_result-> fetch_assoc()正在将数字字段转换为int和float。如何关闭这种行为?

由于我们要将代码移至MySQLi,并且移动应用程序使用了我们的API,因此我们无法更改或强制转换响应字段。

===============使用PDO ===============

$stmt = $pdo->prepare($query);
$result = $stmt->execute($params);
if( $stmt->rowCount() > 0)
{
    $dataset = $stmt->fetchAll(PDO::FETCH_ASSOC);
}
header('Content-type: application/json');
echo json_encode($dataset);

输出:

[
    {
        "isRegistered": "0",
        "DeviceOS": "Android 8.0.0",
        "isActive": "1",
        "City": "Brooklyn"
    }
]

===============使用MySQLi ===============

$stmt = $mysqli->stmt_init();
$stmt->prepare($query);
....
$stmt->execute();
$stmt_result = $stmt->get_result();
if( $stmt_result->num_rows > 0) {
    while( $row = $stmt_result->fetch_assoc() )
        $dataset[] = $row;
}
header('Content-type: application/json');
echo json_encode($dataset);

输出:

[
    {
        "isRegistered": 0,
        "DeviceOS": "Android 8.0.0",
        "isActive": 1,
        "City": "Brooklyn"
    }
]

1 个答案:

答案 0 :(得分:3)

如果只需要结果集中的字符串,则可以在构建$ dataset时将每个值映射到一个字符串:

while( $row = $stmt_result->fetch_assoc() ) {
     $dataset[] = array_map('strval', $row);
}