我有一个论坛系统,在thread.php页面上经常使用$users->permissions()
。我想知道的是,如果我做了像$rights = $users->permissions()
这样的事情,它是否只会让调用做一次数据库来获取此人的权限,而不是像这样做:
if($users->permissions() ==1) { show some mod panel }
elseif($users->permissions == 2) { show some admin panel }
SELECT `users`.`rights` FROM `users` LEFT JOIN `sessions` ON `sessions`.`user_id` = `users`.`id` WHERE `sessions`.`session_hash` ='".$this->con->real_escape_string($_COOKIE['session_hash'])."'
最佳答案
你是对的。如果您将调用的结果存储到变量(例如$users->permissions()
)中,然后使用该变量进行检查,则它将只对数据库执行一次调用(并加快脚本的速度,因为它正在检查该点的本地数据,而不是向其他服务器发出请求)。
但是,如果使用在初始问题中显示的代码,则每次检查该值时,它都将执行对数据库的调用。
就我个人而言,我会使用$rights
结构:
$rights=$users->permissions();
switch ($rights)
{
case 1:
//Show some form
break;
case 2:
//Show something else
break;
default:
//Do something just in case it's not 1 or 2
break;
}
如果您想坚持使用
switch
语句,仍然将if...else
的结果存储到一个变量中,然后无论您在$users->permissions()
结构中说什么$users->permissions()
,都将其替换为if
关于php - 是否将MySQL Fetch数组存储在变量中仅使用一次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/10270551/