我目前正在使用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
答案 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