查询差异

时间:2016-03-15 00:56:07

标签: php mysql codeigniter

我在运行查询时遇到问题并使用以下代码计算结果:

$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();

然后它有效。这三者有什么区别?为什么最后一组代码有效,另外两个代码没有?

4 个答案:

答案 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="" /> 运算符。

Passing an array to a query using a WHERE clause

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

让我知道它的工作与否。