Я пытаюсь обработать результат выбора MySQL. Моя проблема заключается в том, что приведенный ниже пример кода возвращает массив, содержащий все значения, как тип строки даже для столбцов, содержащих целые числа и плавающие элементы.
$sth = mysql_query($selectstr); $rows = array(); while($r = mysql_fetch_row($sth)) { foreach ($r as $value) echo gettype($value), "\n"; }
Если я передаю этот массив в $r
в json_encode(..)
я получаю строковые значения JavaScript на выходе (в окружении кавычек), а не на некорректные числовые значения (что мне нужно).
Как я могу запросить базу данных MySQL и получить массив строк, содержащий значения с правильным типом?
Обновление : второй параметр mysql_fetch_row(..)
удален. Первоначально я использовал mysql_fetch_array(..)
который принимает второй параметр.
Ни одна из функций mysql_fetch_*
не должна mysql_fetch_*
значения по типам столбцов. Для некоторых PHP даже не обеспечивает соответствующего внутреннего представления данных (думаю: BIGINT
).
Если вы знаете тип данных результата запроса, вам нужно будет их вручную вручную. В противном случае mysql_field_type()
даст вам подсказку о том, для какого типа преобразовать результаты.
Я предлагаю следующий код:
<?php $sth = mysql_query($selectstr); $rows = array(); while($r = mysql_fetch_row($sth,MYSQL_NUM)) { foreach ($r as $key => $value) { if (is_numeric($value)) { $r[$key] = (float)$value; } } } ?>
В итоге я изменил свой код следующим образом:
$sth = mysql_query($selectstr); $rows = array(); while($r = mysql_fetch_row($sth)) { for ($i = 0; $i < count($r) ; $i++) settype($r[$i],float); }
с$sth = mysql_query($selectstr); $rows = array(); while($r = mysql_fetch_row($sth)) { for ($i = 0; $i < count($r) ; $i++) settype($r[$i],float); }
Предполагается, что все выбранные столбцы в наборе результатов содержат числовые значения.