我在运行查询时遇到问题并使用以下代码计算结果:
$this->db->get_where('user_tb', array('username' => $username, 'password' => $password) );
$count = $this->db->count_all_results();
即使用户名和密码错误,也始终返回1
。
然后我将代码更改为:
$sql = "SELECT * FROM user_tb WHERE username = ? AND password = ?";
$this->db->query($sql, array($username, $password));
$count = $this->db->count_all_results();
但结果仍然相同。
然后我的第三次也是最后一次尝试,我将代码更改为:
$this->db->where('username', $username);
$this->db->where('password', $password);
$this->db->from('user_tb');
$count = $this->db->count_all_results();
然后它有效。这三者有什么区别?为什么最后一组代码有效,另外两个代码没有?
答案 0 :(得分:1)
在第二行中,您正在使用数组,但在代码的第3行中,您使用单个变量来比较列值,这就是它的工作原理。
要在查询中使用数组,请使用<?php $images = json_decode($row->image);
<?php if(count($images) > 1){?>
<img class="primary-image" src="<?php echo base_url()?>images/<?php echo $images[0] ?>" alt="" />
<img class="secondary-image" src="<?php echo base_url()?>images/<?php echo $images[1] ?>" alt="" />
<?php}
else
{?>
<img class="primary-image" src="<?php echo base_url()?>images/<?php echo $images[0] ?>" alt="" />
运算符。
答案 1 :(得分:1)
因为$this->db->get_where();
和$this->db->query();
执行了查询并返回了sql结果并结束了sql执行。在您呼叫$this->db->count_all_results();
之后,在上述两次呼叫之后,它独立于上述两个呼叫。所以它返回1.并在
$this->db->where('username', $username);
$this->db->where('password', $password);
$this->db->from('user_tb');
$count = $this->db->count_all_results();
使用上述三行查询构建器执行。所以工作正常。
尝试此操作以查看差异
$result = $this->db->get_where('user_tb', array('username' => $username,
'password' => $password) );
$count = $this->db->count_all_results();
print_r($result); // you will see it contains all data related to your query.
当您使用等同于$this->db->count_all_results();
的{{1}}并且将返回1时,没有任何查询。在您的上述两种情况下,情况相同。
答案 2 :(得分:0)
在模型中尝试以下代码
class Auth_login extends CI_Model { public function user_auth($username, $password) { $q = $this->db->where(['uname'=>$username, 'password'=>$password]) ->get('table'); //your table name if($q->num_rows()) { return $q->row()->id; //primary key of returned row } else { return FALSE; } } }
将此代码添加到控制器以验证用户
$username = $this->input->post('user'); $password = $this->input->post('pwd'); $this->load->model('auth_login'); $login_id = $this->auth_login->user_auth($username, $password); if($login_id) { $this->load->library('session'); $this->session->set_userdata('id',$login_id); return redirect('user/dashboard'); } else { $this->session->set_flashdata('feedback','password not match!'); } return $this->load->view('index_login');
答案 3 :(得分:0)
您好试试这段代码并返回受影响的行数
$this->db->get_where('user_tb', array('username' => $username, 'password' => $password) );
$query = $this->db->get();
$rowcount = $query->num_rows();
让我知道它的工作与否。