2011-03-23 62 views
2

從PHP中的MySQL表選擇當結果總是字符串。有沒有辦法獲得正確的數據類型?PHP從MySQL選擇和接收條數據類型

考慮我的表:

CREATE TABLE bar(
    id INT, 
    price FLOAT, 
    name VARCHAR(40)); 

現在我要做的就是:

$result = mysql_query("SELECT id,price,name FROM bar"); 
    while($row = mysql_fetch_assoc($result)) 
    { 
     $row['id'] = (int)$row['id']; 
     $row['price'] = (double)$row['price']; 
    } 
    mysql_free_result($result); 

有沒有辦法從查詢透明地得到正確的數據類型?

10倍, 特拉維夫

+0

爲什麼你需要這個呢? php是一種動態類型較弱的語言。這就是爲什麼我們喜歡它(是的,我們做;-)。不要試圖改變它。如果你需要一些具有強動態類型的語言(這就是你想要得到的),你可以試試python。 – zerkms 2011-03-23 13:28:05

+0

我也愛PHP,但有些時候,就像在這種情況下,我將它作爲JSON返回,在JavaScript中,我需要它作爲排序機制的數字或字符串。 – aviv 2011-03-23 16:17:29

+1

我不得不同意,PHP中的弱打字實際上可能比它的價值更麻煩,而將數據壓縮成特定類型可以解決弱打字可能導致的大多數問題。看到我在switch語句上的問題,看看可能出錯的地方。 http://stackoverflow.com/questions/4098104/odd-behaviour-in-a-switch-statement – GordonM 2011-03-25 10:20:52

回答

2

不,那來自MySQL的所有數據是一個字符串實際上,你可以不用它做任何事情。

-1

其實也沒什麼, 你能做的唯一一件事就是檢查數據類型,

僞:

if(is_int()) 
    (int).... 
else if(is_float()) 
    (float)... 
else ... 

,並檢查所有你期待的類型... 作爲最後的手段它總是字符串。

但如果你會使用PDO,你可以得到該列的數據類型,並相應地轉換......

見:List of PHP native_type's for PDO getColumnMeta()

+0

字符串總是返回'FALSE'爲'is_int()'和'is_float()' – zerkms 2011-03-23 13:25:23

+0

OK,你將不得不使用首先是數字,但想法保持不變 – sharpner 2011-03-23 13:28:51

+0

'is_numeric()'也總是返回'false'作爲字符串。 – zerkms 2011-03-23 13:29:35

0

這不是一個問題的答案,而是一種(黑客?)圍繞這一問題。

CREATE TABLE bar(
    int_id  INT, 
    float_price FLOAT, 
    varchar_name VARCHAR(40) 
); 

然後,當你通過列/鍵名稱檢索所有內容,環路,並根據類型處理它們(一切的第一個下劃線之前)和列名(第一個下劃線後的所有內容)。

此外,這需要你編輯的表..這可能是有問題的。