2012-01-08 66 views
4

這裏是我的代碼:擷取位字段()

$query = "SELECT Username, EmailVerified, Blocked FROM user"; 
$result = mysql_query($query, $link); 
$row = mysql_fetch_assoc($result); 
print_r($row); 

UsernameEmailVerifiedBlocked類型位的。行print_r($row)顯示Username字段的值,但不顯示其他兩個字段。我試過mysql_fetch_object(),mysql_fetch_row(),mysql_fetch_array()也是,但結果相同。

我們不能用mysql_query()獲取位域嗎?

+0

它爲這兩個顯示什麼?他們應該是0或1 – 2012-01-08 15:55:44

+0

@Michael:根本就沒有。 – 2012-01-08 17:39:46

回答

8

我認爲你需要的位字段轉換爲整數 - >

SELECT Username, CAST(EmailVerified AS unsigned integer) AS EmailV, CAST(Blocked AS unsigned integer) AS Block FROM User 
+0

感謝Nicky。這對我有效。 – 2012-01-08 16:10:57

4

是你可以,但它們是作爲字符串檢索,並且極有可能最終會被不可打印的字符。你可以得到的值作爲數字像這樣:

$query = "SELECT Username, EmailVerified, Blocked FROM user"; 
$result = mysql_query($query, $link); 
$row = mysql_fetch_assoc($result); 

$row['EmailVerified'] = ord($row['EmailVerified']); 
$row['Blocked'] = ord($row['Blocked']); 
print_r($row); 
+0

謝謝。這工作。然而,我更喜歡** nicky77 **的方法。 – 2012-01-08 16:10:12

+0

@ kush.impetus很酷,但它們仍然是字符串,所以如果您要使用它們,您需要在PHP後面轉換爲數字:P – Esailija 2012-01-08 16:12:35

+0

@Esalija:您說得對。但是,你知道,如果重要的話,它們將在CPU時間方面耗費巨資。 – 2012-01-08 17:52:18

2

而不是使用BIT並在每次需要使用時將其轉換,你可以使用BOOL(它已經是一個TINYINT)和存儲的TRUE(1)或FALSE (0)值。

+0

我很抱歉,但是,我正在使用Navicat for MySQL版本8.0.26來管理我的MySQL數據庫。我沒有看到任何名爲** BOOL **的數據類型。這可能是因爲我的Navicat版本比較老。我會看到它。無論如何,謝謝。 – 2012-01-08 17:56:04

+3

@kush'BOOL'類型只是'TINYINT(1)'的別名,所以你可以在你的字段中使用這種類型。 – 2012-01-08 17:58:38