sql >> Databasteknik >  >> RDS >> Mysql

konvertera mysql-resultat till json med korrekta typer

Koden nedan är bara ett bevis på konceptet. Den behöver inkapsling i en funktion/metod och lite polering innan den används i produktion (t.ex. anropa mysqli_fetch_field() i en slinga och lagra objekten som den returnerar innan du bearbetar någon rad, inte en gång för varje rad).

Den använder funktionen mysqli_fetch_field() för att få information om varje kolumn i resultatuppsättningen och konverterar de kolumner som har numeriska typer till siffror. Värdena för MYSQLI_TYPE_* konstanter finns på dokumentationssidan för Mysqli fördefinierade konstanter .

// 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");


  1. ADDTIME() returnerar 24 timmars tid

  2. Hur förser man en API-klient med 1 000 000 databasresultat?

  3. Returnera antalet dagar i en månad i MariaDB

  4. Hur man använder EXECUTE FORMAT ... ANVÄNDER i postgres-funktionen