Как отключить поведение приведения mysqli_result :: fetch_assoc ()? - PullRequest
0 голосов
/ 04 сентября 2018

Как вы можете видеть вывод подготовленного оператора 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 голосов
/ 04 сентября 2018

Если вы хотите, чтобы в результирующем наборе были только строки, вы можете отобразить каждое значение в строку при построении набора данных:

while( $row = $stmt_result->fetch_assoc() ) {
     $dataset[] = array_map('strval', $row);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...