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

Php 如何关闭mysqli_result::fetch_assoc()的强制转换行为?,php,mysqli,pdo,Php,Mysqli,Pdo,正如您所看到的,PDO准备语句和MySQLi语句的输出。现在的问题是$stmt\u result->fetch\u assoc()将数值字段强制转换为int和float。如何才能关闭此行为 由于我们希望将代码移动到MySQLi,并且移动应用程序使用我们的API,因此我们无法更改或强制转换response字段 ======================使用PDO===================================== $stmt = $pdo->prepare($quer

正如您所看到的,PDO准备语句和MySQLi语句的输出。现在的问题是$stmt\u result->fetch\u assoc()将数值字段强制转换为int和float。如何才能关闭此行为

由于我们希望将代码移动到MySQLi,并且移动应用程序使用我们的API,因此我们无法更改或强制转换response字段

======================使用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);
$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"
    }
]
[
    {
        "isRegistered": 0,
        "DeviceOS": "Android 8.0.0",
        "isActive": 1,
        "City": "Brooklyn"
    }
]
======================使用MySQLi=================================================

$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);
$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"
    }
]
[
    {
        "isRegistered": 0,
        "DeviceOS": "Android 8.0.0",
        "isActive": 1,
        "City": "Brooklyn"
    }
]

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

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

sql中的列类型是什么?PDO也应该将这些转换为整数,但您只希望返回字符串?我也尝试过,PDO似乎将int列转换为PHP数字类型。似乎表明mysqli将始终转换为strings@Barmar它还建议使用本机驱动程序可以在@riggsfully解决这个问题——可能就是这样——这里的OP可能使用的是MYSQLND。