mysql_query возвращает только тип строки для типа int / fload db

Я пытаюсь обработать результат выбора 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); } 

Предполагается, что все выбранные столбцы в наборе результатов содержат числовые значения.