PHP中的位操作和MySQL检索

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了PHP中的位操作和MySQL检索脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图优化我的 mysql一点点,以便有一个稍微更易于管理的表.我想将用户权限存储在位字段中.

例如,用户权限可能是0110(我的用户权限越来越多,所以这个长度可能会长一些)

该示例可能对应于以下内容

0:用户无法在网站上发布新闻
1:用户可以在网站上发布新文章
1:用户可以编辑网站上的任何文章
0:用户无法从网站上删除文章
等(其他权限)

如果我将它存储在MysqL位字段中.我怎样才能在PHP中操作它?

例如,在PHP中有一种简单方法获取第3位并查看它是0还是1?

有没有一种简单的方法可以将第3位设置为0或1?

解决方法

你可以使用 bitwise operators.

例如 :

$bITs = bindec('0110');
var_dump($bits & bindec('0100'));

将得到“4”(即非零 – 你可以认为是“ok”),因为$bits中的第三位被设置.

而且:

$bits = bindec('0010');
VAR_dump($bits & bindec('0100'));

会得到0 – 因为$bits中的第三位未设置.

当然,每次都不需要调用bindec – 我只是在这里使用它来使事情更容易阅读;我的第一个例子可以改写成这样的东西:

$bits = bindec('0110');
var_dump($bits & 1<<2);

为了使代码更容易理解,不要使用这样的魔值,而是使用一些常量;例如 :

define('PERMISSION_TO_DO_X',1);
define('PERMISSION_TO_DO_Y',1<<1);
define('PERMISSION_TO_DO_Z',1<<2);

并使用它们:

$bits = bindec('0110');
if ($bits & PERMISSION_TO_DO_X) {
    echo "OK to do X<br />";
}
if ($bits & PERMISSION_TO_DO_Y) {
    echo "OK to do Y<br />";
}
if ($bits & PERMISSION_TO_DO_Z) {
    echo "OK to do Z<br />";
}

在这里,你可以得到那种输出

OK to do Y
OK to do Z

因为:

>最右边的位为0(未授予权限X)>第二位(从右侧开始)为1:授予Y权限>第三位(仍然始终从右边开始)是1:授予Z权限

脚本宝典总结

以上是脚本宝典为你收集整理的PHP中的位操作和MySQL检索全部内容,希望文章能够帮你解决PHP中的位操作和MySQL检索所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。