2011-02-16 160 views
17

從MySQL返回數據時,無論MySQL數據類型如何,都會自動將其作爲字符串返回。如何從PHP中以整數形式獲取MySQL中的整數?

有什麼辦法告訴MySQL/PHP維護數據類型(例如int),所以如果你查詢一個int列,你會得到一個PHP中的整數而不是字符串?

+2

值得一提的是PHP不能浩ld大於`PHP_INT_MAX`的整數(在我的電腦中是2,147,483,647)。這可以安全地存儲一個有符號的INT,但不是一個無符號的INT或任何更大的。 – 2011-02-16 09:25:56

回答

15

那麼你可以用Type casting來轉換使用PHP返回的數據類型。

你可以看看int,intval轉換爲整數。你也可以使用settype

settype($foo, "array"); 
settype($foo, "bool"); 
settype($foo, "boolean"); 
settype($foo, "float"); 
settype($foo, "int"); 
settype($foo, "integer"); 
settype($foo, "null"); 
settype($foo, "object"); 
settype($foo, "string"); 

另一種方法是:

$foo = (array)$foo; 
$foo = (b)$foo;  // from PHP 5.2.1 
$foo = (binary)$foo; // from PHP 5.2.1 
$foo = (bool)$foo; 
$foo = (boolean)$foo; 
$foo = (double)$foo; 
$foo = (float)$foo; 
$foo = (int)$foo; 
$foo = (integer)$foo; 
$foo = (object)$foo; 
$foo = (real)$foo; 
$foo = (string)$foo; 
+1

+1這幾乎涵蓋了類型轉換選項。 :-) – 2011-02-16 09:19:06

+0

如果你的整數大於`PHP_INT_MAX`,它將被限制。例如,即使您運行的是64位PHP,也無法將全部MySQL的`unsigned bigint`全部獲取到PHP中。 – Pacerier 2015-07-27 05:58:37

1

由於PHP不是一個強類型語言,這是有點意思的,但你當然可以簡單地投在現場在使用之前通過settype等問題到int。

無論如何,我都無法自動維護這些「類型」信息。

+1

在追求意義時,我試圖想象通過類型轉換可能帶來的性能提升。我認爲將數值作爲int或float會佔用更少的內存,另一方面,手動類型轉換過程本身會佔用資源,並且會使php代碼稍微膨脹。所以,手動類型轉換看起來像是對我的表面微觀優化,而如果可能的話,MySQL返回正確類型的結果似乎是合理的。 – Schmoove 2012-04-19 15:26:59

0

PHP的MySQL默認庫沒有這種類型的選項。使用類型鑄造 像(int)或intval,(浮動)等

0

在php中,你可以使用([類型])來確保$ something是整數,這有助於SQL注入,如果你知道它。

例如:

(int) $something; 
2

你可以使用類型轉換,一旦你從你的MySQL數據庫

$row['field'] = (int)$row['field']; 
8

拉着數據在庫MySQLi使用bind_result:它設置正確的類型和處理NULL

0

我不知道你問這個問題的背景。因爲php變量的數據類型取決於表中某列的數據類型。如果該列中的數據類型爲「int」,那麼在php中將得到一個整數(而不是字符串)。

但無論如何,您可以使用is_numeric(),is_int()或gettype()php函數來知道Mysql返回值的數據類型。 is_numeric()的問題在於,即使變量包含數字字符串,它也會返回true,例如「2」。 但gettype()將返回「string」,並且在所提及的示例中,is_int()將始終返回false,即「2」。

一旦你知道一個返回值的數據類型可以將PHP變量綁定到保持像這樣類型的類型轉換:

// Suppose this is the returned value from mysql and 
// you do not know its data type. 
$foo = "2"; 

if (gettype($foo) == "string"){ 
    $foo = (string) $foo; 
} 

可以進行多次檢查變量有什麼樣的數據類型和然後相應地施放它。

我希望這個回覆會有幫助。祝你好運!:)

0

如果你想通過價格的值ordening,您可以更改 數據類型的列FLOAT(例如:價格)

EX:

TABLE普電子

price  id 
---------------- 
55.90  1 
40.33  2 
10.60  3 
1596.90  4 
56.90  5 

PHP:

$sql = $pdo->query("SELECT * FROM eletronics ORDER BY price DESC"); 

//導致

1596.90  4 
56.90  5 
55.90  1 
40.33  2 
10.60  3 

//順序按價格暫時// OBS:您使用str_replace函數可以改變點與 「」()//結果:1596,90 - 56,90 - 55,90 - 40,33 - 10,60等

3

如果您正在運行Ubuntu:

sudo apt-get remove php5-mysql 
sudo apt-get install php5-mysqlnd 
sudo service apache2 restart