Codeigniter数据库错误:1064使用MySQL,可能还有一些会话配置错误

时间:2016-02-17 08:34:29

标签: php mysql codeigniter session xampp

我目前正在使用Codeigniter 3.xx,我尝试使用会话检查进行多级登录。我从其他网站获得了一些教程,但查询出错了。 顺便说一句,这是控制器:

    <?php
defined('BASEPATH') OR exit('No direct script access allowed');

class Auth extends CI_Controller {

    public function index() {
        $this->load->view('login');
    }

    public function cek_login() {
        $data = array('nip' => $this->input->post('nip'),
                        'password' => $this->input->post('password')
            );
        $this->load->model('user_m'); 
        $hasil = $this->user_m->cek_user($data);
        if ($hasil->num_rows() == 1) {
            foreach ($hasil->result() as $sess) {
                $sess_data['logged_in'] = 'Sudah Loggin';
                $sess_data['nip'] = $sess->nip;
                $sess_data['akses'] = $sess->akses;
                $this->session->set_userdata($sess_data);
            }
            if ($this->session->userdata('akses')=='admin') {
                redirect('admin');
            }
            elseif ($this->session->userdata('akses')=='member') {
                redirect('user');
            }       
        }
        else {
            echo "<script>alert('Gagal login: Cek username, password!');history.go(-1);</script>";
        }
    }

}

?>

这是控制器的模型:

<?php
defined('BASEPATH') OR exit('No direct script access allowed');

    class User_m extends CI_Model {

        public function cek_user($data) {
            $query = $this->db->get_where(`pegawai`, $data);
            return $query;
        }

    }

?>

然后我收到了这个错误:

错误号码:1064 您的SQL语法有错误;查看与您的MariaDB服务器版本对应的手册,以获得正确的语法,以便在&#39; WHERE nip =&#39; 21212121&#39;和password =&#39;用户&#39;&#39;在第2行 SELECT * WHERE nip =&#39; 21212121&#39;和password =&#39;用户&#39; 文件名:C:/xampp/htdocs/simpeg/application/models/User_m.php 行号:7

我知道我不会将MariaDB引擎用于此表,如果运行正确,则应以用户身份登录。 任何人都可以解释这种语法有什么问题吗? 顺便说一句,我在这个项目中使用最新的XAMPP for PHP 7和Codeigniter

更新 在我尝试了一些代码之后,我认为我的会话配置存在一些问题。 这是我的会话config.php:

$config['sess_driver'] = 'files';
$config['sess_cookie_name'] = 'ci_session';
$config['sess_expiration'] = 7200;
$config['sess_save_path'] = NULL;
$config['sess_match_ip'] = FALSE;
$config['sess_time_to_update'] = 300;
$config['sess_regenerate_destroy'] = FALSE;

这是我在系统文件夹中的Session.php中的配置:

class CI_Session {

    var $sess_encrypt_cookie        = FALSE;
    var $sess_use_database          = FALSE;
    var $sess_table_name            = '';
    var $sess_expiration            = 7200;
    var $sess_expire_on_close       = FALSE;
    var $sess_match_ip              = FALSE;
    var $sess_match_useragent       = TRUE;
    var $sess_cookie_name           = 'ci_session';
    var $cookie_prefix              = '';
    var $cookie_path                = '';
    var $cookie_domain              = '';
    var $cookie_secure              = FALSE;
    var $sess_time_to_update        = 300;
    var $encryption_key             = '';
    var $flashdata_key              = 'flash';
    var $time_reference             = 'time';
    var $gc_probability             = 5;
    var $userdata                   = array();
    var $CI;
    var $now;

在Codeigniter的新版本(我使用的那个)中,每当我尝试自动加载会话时,总是要求我为会话添加一些加密密钥,所以在我把加密密钥放在那里之后就出错了有关会话的查询如下: 错误号码:1064 您的SQL语法有错误;检查与您的MariaDB服务器版本对应的手册,以便使用“last_activity = 1455761673,user_data =&#39; a:2:{s:9:\ &#34; USER_DATA \&#34 ;; S:0:\&#34; \&#34;&#39;在第1行 UPDATE SET last_activity = 1455761673,user_data =&#39; a:2:{s:9:\&#34; user_data \&#34 ;; s:0:\&#34; \&#34 ;; S:3:\&#34;夹持\&#34 ;; S:10:\&#34; 1234567890 \&#34 ;;}&#39;在session_id =&#39; 316bdf2f67b16beafbe30b56bca3833d&#39; 文件名:libraries / Session.php 行号:306

3 个答案:

答案 0 :(得分:2)

我知道这是一个老问题,但仍然是正确的答案是你必须仔细阅读config.php文件,你会明白你错过了一些配置点以正确的方式保存会话。

/* 'sess_save_path'
|
|   The location to save sessions to, driver dependent.
|
|   For the 'files' driver, it's a path to a writable directory.
|   WARNING: Only absolute paths are supported!
|
|   For the 'database' driver, it's a table name.
|   Please read up the manual for the format with other session drivers.
|
|   IMPORTANT: You are REQUIRED to set a valid save path!
*/

您的会话路径不正确!

答案 1 :(得分:0)

改变
 $query = $this->db->get_where(`pegawai`, $data);
 return $query;

 $this->db->where($data);
 $query=$this->db->get('pegawai');
 return $query;

答案 2 :(得分:0)

对不起,我找到了问题的答案...... 在我尝试再次下载最新的Codeigniter,并在我的项目中替换它,并重新配置我的项目后,我的查询被读取并成功执行,但会话没有。所以我试着调试我的代码2天,我发现(大约15分钟前)我的控制器中有一些奇怪的管理员/用户,没有<?php defined('BASEPATH') OR exit('No direct script access allowed');而是<?php session_start();所以我改变它,问题解决了。哦,如果有人找到了

  

库/ session.php文件

删除它!

这是我遇到此错误的第一个原因

  

错误号:1064您的SQL语法出错;检查   与您的MariaDB服务器版本对应的手册   在'WHERE nip ='21212121'和密码='用户''附近使用的语法   第2行SELECT * WHERE nip ='21212121'AND password ='user'文件名:   C:/xampp/htdocs/simpeg/application/models/User_m.php行号:7

感谢所有帮助过我的人......:D