2011-09-18 33 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

相關問題