2012-01-08 71 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