我想知道什么更有效,只执行一个查询并将结果存储在数组中,然后使用PHP中的in_array函数检查此数组,或者在每次需要检查值时进行MySQL查询?
例如: 我创建了此函数以将查询存储在数组中,因此该查询将只执行一次。
private function carregaPermissoes(){
$query = mysql_query("SELECT permissao_nome FROM sisgrupopermissoes WHERE id_grupo = ".$this->getGid().";");
if (mysql_num_rows($query) > 0){
$array_permissoes = array();
while ($row = mysql_fetch_array($query)){
array_push($array_permissoes, $row["permissao_nome"]);
}
return $array_permissoes;
}
}
然后每次需要检查时,我都使用此功能:
public function checkPermissao($permissao){
$this->setPermissao($permissao);
if (in_array($this->getPermissao(), $this->getGrupoPermissao())){
return true;
}else{
return false;
}
}
这是一个好方法吗?还是最好在每次需要检查时进行查询?
答案 0 :(得分:1)
SQL查询慢,通常是 网络。您的功能可以简化为:
public function checkPermissao($permissao)
{
// The following line smells...
$this->setPermissao($permissao);
return in_array($this->getPermissao(), $this->getGrupoPermissao());
}
答案 1 :(得分:0)
您将权限存储在数组中并在其中检查。如果有人/管理员更改了权限,这时您在数组中拥有旧的权限,据我所知,使用数组不是一个好习惯。
您可以像执行查询一样
$query = mysql_query("SELECT permissao_nome FROM sisgrupopermissoes WHERE id_grupo = ".$this->getGid()." AND permissao_nome='".$this->getPermissao()."'");
并使用mysql_num_rows检查条件
return mysql_num_rows($query)