2011-09-18 116 views
2

我有以下MySQL查询,和PHP代码在单个阵列中格式化Count结果:PHP的MySQL计数查询结果是字符串,而不是整数

$equalDimensions_query = 
"SELECT 'allEqual' AS COL1,COUNT(*) AS imgCount FROM (
    SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images 
    UNION ALL 
    SELECT imgHeight, imgWidth, primaryId FROM secondary_images 
) AS union_table 
WHERE primaryId = $imgId AND imgWidth = $maxImageWidth AND imgHeight = $maxImageHeight 
UNION ALL 
SELECT 'widthEqual' AS COL1,COUNT(*) AS imgCount FROM (
    SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images 
    UNION ALL 
    SELECT imgHeight, imgWidth, primaryId FROM secondary_images 
) AS union_table 
WHERE primaryId = $imgId AND imgWidth = $maxImageWidth AND imgHeight != $maxImageHeight 
UNION ALL 
SELECT 'heightEqual' AS COL1,COUNT(*) AS imgCount FROM (
    SELECT imgHeight, imgWidth, imgId AS primaryId FROM primary_images 
    UNION ALL 
    SELECT imgHeight, imgWidth, primaryId FROM secondary_images 
) AS union_table 
WHERE primaryId = $imgId AND imgWidth != $maxImageWidth AND imgHeight = $maxImageHeight"; 

$equalDimensions_data = mysql_query($equalDimensions_query) or die('MySql Error' . mysql_error()); 

while ($row = mysql_fetch_assoc($equalDimensions_data)) { 
    $cnt[$row['COL1']] = $row['imgCount']; 
} 

var_dump($cnt); 

(注意我包括var_dump($cnt)作为最后线)

var_dump返回以下的数组:

array 
(
    'allEqual' => string '2' (length=1) 
    'widthEqual' => string '0' (length=1) 
    'heightEqual' => string '0' (length=1) 
) 

我很好奇为什么计数被返回为一个字符串,而不是一个整数?

它应该作为整数返回吗?或者,在处理count查询时是否是标准,结果是以字符串形式返回的?

谢谢。

回答

5

http://www.php.net/manual/en/function.mysql-fetch-assoc.php

如果没有更多的行,则返回字符串的关联数组对应于 提取的行,或FALSE。

(强调我的)这对于MySQL驱动程序来说可能更容易让所有的东西都作为一个字符串,并且假设你会知道如何处理它。只需使用intval()即可获得整数值。

+0

链接和PHP将字符串更改为整数的荣誉。优秀的答案。 – stefmikhail

+0

+1为文档参考:) – Jon

1

无论是列值还是函数的结果(返回值的类型也不起作用),所有内容都返回为字符串¹,无论它是列值(列的类型不会起任何作用)。至少在谈论MySql驱动程序时,

+0

我明白了。所以当我看到关联数组中的整数值时,它们不是直接从mysql结果创建的? – stefmikhail

+0

@stefmikhail:是的,它随之而来。 – Jon

相关问题