如何使用 sql 中的两个表数据进行管理员登录?
How to admin login using two tables data in sql?
我有 3 tables users
、roles
和 permissions
用户table
角色
权限
In users
table user1
是 Admin 并且当他的 roleId 在角色 table 中是 13 并且权限中的视图是 1 时他必须登录 table.如何为此编写查询。我尝试了一些方法,但它不起作用
Adminmodel.php
public function auth($data){
$sql="SELECT * FROM users
WHERE email='". $data['email'] . "'
AND password='". $data['password']."'
AND roleId=13
UNION
SELECT roleId FROM permissions
WHERE view=1" ;
;
$query=$this->db->query($sql);
return $query;
}
管理员登录controller.php
public function auth(){
$username=$this->input->post("username");
$password=md5($this->input->post('password'));
$data['email']=$username;
$data['password']=$password;
$q=$this->Adminmodel->auth($data);
$result=0;
$status=0;
if($q->num_rows()>0){
$result=$q->row()->status==0?-1:1;
if($result==1){
$admindata=array(
'cp_adminid'=>$q->row()->userId,
'cp_roleid'=>$q->row()->roleId
);
$this->session->set_userdata($admindata);
if (!is_dir('private/'.$q->row()->userId)) {
$oldmask = umask(0);
$q=mkdir('private/' .$q->row()->userId,0777,true);
umask($oldmask);
copy('public/images/default_user.png','private/'.$q->row()->userId.'/default-profile_pic.png');
}
}else{
}
//$msg="error occured";
}
$data['result']=$result;
//$res=$this->load->view("user/userhome",$data,true);
$value=array(
'result'=>$result,
);
echo json_encode($value);
}
使用 JOINS
代替 UNION
。
JOINS
用于定义不同表之间的关系并根据它们获取数据。
对于你的问题,这将有效。
SELECT * FROM users u
JOIN roles r ON r.roleId = u.roleId
JOIN permissions p ON p.roleId = r.roleId
WHERE email='". $data['email'] . "'
AND password='". $data['password']."'
AND r.roleId=13
AND p.view=1
另请参阅此 link 了解 MYSQL JOINS 的基础知识:http://www.w3schools.com/sql/sql_join.asp
我有 3 tables users
、roles
和 permissions
用户table
角色
权限
In users
table user1
是 Admin 并且当他的 roleId 在角色 table 中是 13 并且权限中的视图是 1 时他必须登录 table.如何为此编写查询。我尝试了一些方法,但它不起作用
Adminmodel.php
public function auth($data){
$sql="SELECT * FROM users
WHERE email='". $data['email'] . "'
AND password='". $data['password']."'
AND roleId=13
UNION
SELECT roleId FROM permissions
WHERE view=1" ;
;
$query=$this->db->query($sql);
return $query;
}
管理员登录controller.php
public function auth(){
$username=$this->input->post("username");
$password=md5($this->input->post('password'));
$data['email']=$username;
$data['password']=$password;
$q=$this->Adminmodel->auth($data);
$result=0;
$status=0;
if($q->num_rows()>0){
$result=$q->row()->status==0?-1:1;
if($result==1){
$admindata=array(
'cp_adminid'=>$q->row()->userId,
'cp_roleid'=>$q->row()->roleId
);
$this->session->set_userdata($admindata);
if (!is_dir('private/'.$q->row()->userId)) {
$oldmask = umask(0);
$q=mkdir('private/' .$q->row()->userId,0777,true);
umask($oldmask);
copy('public/images/default_user.png','private/'.$q->row()->userId.'/default-profile_pic.png');
}
}else{
}
//$msg="error occured";
}
$data['result']=$result;
//$res=$this->load->view("user/userhome",$data,true);
$value=array(
'result'=>$result,
);
echo json_encode($value);
}
使用 JOINS
代替 UNION
。
JOINS
用于定义不同表之间的关系并根据它们获取数据。
对于你的问题,这将有效。
SELECT * FROM users u
JOIN roles r ON r.roleId = u.roleId
JOIN permissions p ON p.roleId = r.roleId
WHERE email='". $data['email'] . "'
AND password='". $data['password']."'
AND r.roleId=13
AND p.view=1
另请参阅此 link 了解 MYSQL JOINS 的基础知识:http://www.w3schools.com/sql/sql_join.asp