CodeIgniter无法更新数据库

时间:2017-08-03 01:59:07

标签: php codeigniter sql-update

我的网络应用程序中的用户登录有问题。我要做的是在他/她登陆主页之前用当前日期和时间更新特定用户的last_online_at值。但是,它没有像我预期的那样更新。

这是我的代码:

...

 if($result != FALSE){
    $this->db->select('name');
    $this->db->from('user_type');
    $this->db->where("id ='" . $result[0]->user_type_id . "'");

    $query = $this->db->get();

    $session_data = array('first_name' => $result[0]->first_name,
                          'last_name' => $result[0]->last_name,
                          'username' => $result[0]->username,
                          'email' => $result[0]->email,
                          'id' => $result[0]->user_id,
                          'created_at' => date_parse($result[0]->created_at),
                          'recent_searches' => array(),
                          'food_tray' => array('Sample', 'Test', 'Qwerty'),
                          'logged_in' => TRUE,
                          'user_type' => $query->row()->name,
                          'user_type_id' => $result[0]->user_type_id,
                          'user_privileges' => array());

    $this->session->set_userdata($session_data);

    // LINE OF CODE RESPONSIBLE FOR UPDATING `last_online_at` VALUE //

    $data = array('last_online_at' => date('Y-m-d H:i:s'));

    $this->db->update('user', $data, 'id =' . $session_data['id']);

    /////////////////////////////////////////////////////////////////

    if($session_data['user_type'] == 'Customer'){
        // REDIRECT TO USER PAGE
        redirect(base_url() . "index.php/main");
    }else if($session_data['user_type'] == 'Aggregator' ||
             $session_data['user_type'] == 'Restaurant Owner' ||
             $session_data['user_type'] == 'System Admin'){
        // REDIRECT TO ADMIN DASHBOARD
        redirect(base_url() . "index.php/admin?page_view=admin_dash");
    }               
}

从给定的代码片段中可以看出,我使用变量$session_data['id']作为参数值替换为更新查询中的where子句,而那是不起作用的那个。但是当我将它替换为静态值(例如1)时,它将顺利运行并根据给定的静态值更新记录

我做错了吗?任何帮助将不胜感激

1 个答案:

答案 0 :(得分:0)

首先,您需要确保$session_data['id']中包含正确的值。

因此,在尝试使用print进行$session_data

的确切包含之前
echo "<pre>";
print_r($session_data);
echo "</pre>";

我还建议您使用CodeIgniter日志。

log_message('debug', 'Your Session Data: '.print_r($session_data, TRUE));
log_message('debug', 'You can see last executed query also: '.print_r($this->db->last_query(), TRUE));

在使用之前,请启用日志表单配置。

此技术可帮助您了解代码中发生的情况。

要进行更新,最后一次登录日期请尝试:

$data = array('last_online_at' => date('Y-m-d H:i:s'));
$this->db->where('id', $session_data['id']);
$this->db->update('user', $data);