Кодът по-долу е само доказателство за концепцията. Нуждае се от капсулиране във функция/метод и известно полиране, преди да се използва в производството (напр. извикайте mysqli_fetch_field()
в цикъл и съхранява обектите, които връща, преди да обработи всеки ред, а не веднъж за всеки ред).
Той използва функцията mysqli_fetch_field()
за да получите информация за всяка колона от набора от резултати и преобразува в числа онези колони, които имат числови типове. Стойностите на MYSQLI_TYPE_*
константите могат да бъдат намерени в страницата с документация на предварително дефинирани константи в 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");