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->output->enable_profiler(TRUE);
打印您的query
并尝试在数据库控制台中运行该查询。它会很容易调试。
@Kamran 你的意思是用$this->output->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 分钟前)我的管理员/用户控制器中有一些奇怪的东西,没有 <?php defined('BASEPATH') OR exit('No direct script access allowed');
而是 <?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 服务器版本相对应的手册,了解在 'SETlast_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 可能还有一些会话配置错误的主要内容,如果未能解决你的问题,请参考以下文章
错误 #1064:phpMyAdmin 导入在 MYSQL 数据库中显示 html 错误 - 为啥是 html?