mysql_query仅返回int / fload db类型的字符串类型

时间:2012-01-13 15:21:21

标签: php mysql

我正在尝试处理MySQL选择结果。我的问题是下面的示例代码只返回一个包含所有值为 string -type的数组,即使对于包含整数和浮点数的列也是如此。

$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(..)接受第二个参数。

3 个答案:

答案 0 :(得分:4)

mysql_fetch_*函数都不应该根据列的类型来强制转换值。对于某些人来说,PHP甚至不提供匹配的内部数据表示(想想:BIGINT)。

如果您知道查询结果的数据类型,则需要手动转换它们。否则mysql_field_type()会提示您将结果转换为的类型。

答案 1 :(得分:0)

我建议使用以下代码:

<?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;
     }
  }
}
?>

答案 2 :(得分:0)

最后我改变了我的代码如下:

$sth = mysql_query($selectstr);
$rows = array();
while($r = mysql_fetch_row($sth)) {
  for ($i = 0; $i < count($r) ; $i++) 
    settype($r[$i],float); 
}

它假定结果集中的所有选定列都包含数值。