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

Posted

技术标签:

【中文标题】Codeigniter 数据库错误:1064 使用 MySQL 可能还有一些会话配置错误【英文标题】:Codeigniter Database Error : 1064 Using MySQL and maybe some session config error 【发布时间】:2016-05-28 20:25:50 【问题描述】:

我目前正在使用 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 服务器版本相对应的手册,以在第 2 行的 'WHERE nip = '21212121' AND password = 'user'' 附近使用正确的语法 选择 * 在哪里 nip = '21212121' 和 password = '用户' 文件名: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 服务器版本相对应的手册,了解在 'SET last_activity = 1455761673, user_data = 'a:2:s:9:\"user_data\";s:0:\ 附近使用的正确语法"\"' 在第 1 行 更新集last_activity = 1455761673, user_data = 'a:2:s:9:\"user_data\";s:0:\"\";s:3:\"nip\";s:10 :\"1234567890\";' 其中session_id = '316bdf2f67b16beafbe30b56bca3833d' 文件名:库/Session.php 行号:306

【问题讨论】:

使用$this-&gt;output-&gt;enable_profiler(TRUE); 打印您的query 并尝试在数据库控制台中运行该查询。它会很容易调试。 @Kamran 你的意思是用$this-&gt;output-&gt;enable_profiler(TRUE); 更改回报吗? 【参考方案1】:

我知道这是一个老问题,但正确的答案仍然是您必须仔细阅读 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!
*/

您的会话路径不正确!

【讨论】:

【参考方案2】:

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

库/Session.php

删除!

这是我出现此错误的第一个原因

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

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

【讨论】:

【参考方案3】:

改变

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

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

【讨论】:

抱歉,还有另一个错误:错误号:1064 您的 SQL 语法有错误;查看与您的 MariaDB 服务器版本相对应的手册,了解在 'SET last_activity = 1455757641, user_data = 'a:4:s:9:\"user_data\";s:0:\ 附近使用的正确语法"\"' 在第 1 行 UPDATE SET last_activity = 1455757641, user_data = 'a:4:s:9:\"user_data\";s:0:\"\";s:9:\" logged_in\";s:12:\"Sudah Loggin\";s:3:\"nip\";s:10:\"1234567890\";s:5:\"akses\";s:5:\ "admin\";' WHERE session_id = 'f4f0eae180cfca66af04e6cd2dbb2f5a' 文件名:libraries/Session.php 行号:306 在此之前,由于我没有为加密会话制作密钥,因此出现错误,但是在我制作密钥后,出现了这样的错误 我使用反引号调用 pegawai 表,还有另一个错误,就像第一个一样...真的是我在会话中有错误? 从 ci_sessions 表中删除记录 如何删除?

以上是关于Codeigniter 数据库错误:1064 使用 MySQL 可能还有一些会话配置错误的主要内容,如果未能解决你的问题,请参考以下文章

Joomla 1064 管理错误

创建触发器时出现错误 1064

错误 #1064:phpMyAdmin 导入在 MYSQL 数据库中显示 html 错误 - 为啥是 html?

mysql - 使用关键字作为列名时出现错误 1064 (42000)

EXISTS 子查询导致错误 1064

#1064 - MySQL 服务器版本在“END”错误附近使用正确的语法?