Đoạn mã dưới đây chỉ là một bằng chứng về khái niệm. Nó cần được đóng gói trong một hàm / phương thức và một số thao tác đánh bóng trước khi sử dụng trong sản xuất (ví dụ:gọi mysqli_fetch_field()
trong một vòng lặp và lưu trữ các đối tượng mà nó trả về trước khi xử lý bất kỳ hàng nào, không phải một lần cho mỗi hàng).
Nó sử dụng hàm mysqli_fetch_field()
để nhận thông tin về từng cột của tập kết quả và chuyển đổi thành số các cột có kiểu số. Giá trị của MYSQLI_TYPE_*
Bạn có thể tìm thấy hằng số trong trang tài liệu của Hằng số xác định trước 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");