Mysql
 sql >> Base de données >  >> RDS >> Mysql

convertir le résultat mysql en json avec les types corrects

Le code ci-dessous n'est qu'une preuve de concept. Il a besoin d'être encapsulé dans une fonction/méthode et d'être peaufiné avant de l'utiliser en production (par exemple, appelez mysqli_fetch_field() dans une boucle et stocker les objets qu'il renvoie avant de traiter n'importe quelle ligne, pas une fois pour chaque ligne).

Il utilise la fonction mysqli_fetch_field() pour obtenir des informations sur chaque colonne du jeu de résultats et convertit en nombres les colonnes qui ont des types numériques. Les valeurs de MYSQLI_TYPE_* les constantes peuvent être trouvées dans la page de documentation de Constantes prédéfinies Mysqli .

// Get the data
$result = mysqli_query($db, "SELECT * FROM table WHERE id=1");
$row    = mysqli_fetch_assoc($result);

// Fix the types    
$fixed = array();
foreach ($row as $key => $value) {
    $info = mysqli_fetch_field($result);
    if (in_array($info->type, array(
            MYSQLI_TYPE_TINY, MYSQLI_TYPE_SHORT, MYSQLI_TYPE_INT24,    
            MYSQLI_TYPE_LONG, MYSQLI_TYPE_LONGLONG,
            MYSQLI_TYPE_DECIMAL, 
            MYSQLI_TYPE_FLOAT, MYSQLI_TYPE_DOUBLE
    ))) {
        $fixed[$key] = 0 + $value;
    } else {
        $fixed[$key] = $value;
    }
}

// Compare the results
echo('all strings: '.json_encode($row)."\n");
echo('fixed types: '.json_encode($fixed)."\n");