我正在尝试处理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(..)
接受第二个参数。
答案 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);
}
它假定结果集中的所有选定列都包含数值。