仅执行一个查询并将其存储在数组中或每次进行查询是否更有效率?

时间:2019-04-25 16:20:11

标签: php mysql arrays

我想知道什么更有效,只执行一个查询并将结果存储在数组中,然后使用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;
        }
    }

这是一个好方法吗?还是最好在每次需要检查时进行查询?

2 个答案:

答案 0 :(得分:1)

SQL查询,通常是 网络。您的功能可以简化为:

public function checkPermissao($permissao)
{
    // The following line smells...
    $this->setPermissao($permissao);
    return in_array($this->getPermissao(), $this->getGrupoPermissao());
}

如果您担心in_array引入的开销(本质上使用顺序搜索),则可以docs进行干草堆数组操作,而改为使用flip

答案 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)