我正在为我的库文件创建用户登录。但我的 user_query->rows 不起作用,不知道如何修复它,正在阅读用户指南。
$this->user_id = $user_query->row('user_id');
$this->username = $user_query->row('username');
$this->CI->session->userdata('user_id') = $user_query->row('user_id');
Fatal error: Can't use method return value in write context in C:\xampp\htdocs\codeigniter-cms\system\libraries\Users.php on line 69
Fatal error: Can't use method return value in write context in C:\xampp\htdocs\codeigniter-cms\system\libraries\Users.php on line 65
public function login() {
$user_query = $this->CI->db->query("SELECT * FROM " . $this->CI->db->dbprefix . "user WHERE username = '" . $this->CI->db->escape($username) . "' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1('" . $this->CI->db->escape($password) . "'))))) OR password = '" . $this->CI->db->escape(md5($password)) . "') AND status = '1'");
if ($user_query->num_rows() == 1) {
$data = array(
'user_id' => $this->user_id,
'username' => $this->username
);
$this->CI->session->set_userdata($data);
$this->user_id = $user_query->row('user_id');
$this->username = $user_query->row('username');
// line 65
$this->CI->session->userdata('user_id') = $user_query->row('user_id');
// Line 69
$user_group_query = $this->CI->db->query("SELECT permission FROM " . $this->CI->db->dbprefix . "user_group WHERE user_group_id = '" . (int)$user_query->row('user_group_id') . "'");
$permissions = unserialize($user_group_query->row('permission'));
if (is_array($permissions)) {
foreach ($permissions as $key => $value) {
$this->permission[$key] = $value;
}
}
} else {
return false;
}
}
新错误我删除了此处显示的密码
Error Number: 1064
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'admin'' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(''*****''))))) O' at line 1
SELECT * FROM oc_user WHERE username = ''admin'' AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(''******''))))) OR password = ''***************'') AND status = '1'
Filename: C:\xampp\htdocs\codeigniter-cms\system\database\DB_driver.php
Line Number: 330
最佳答案
你想用这一行做什么:
$this->CI->session->userdata('user_id') = $user_query->row('user_id');
您是否正在尝试设置 session ?在这种情况下,您需要使用 set_userdata()
:
$this->CI->session->set_userdata('user_id', $user_query_>row('user_id');
另外,我从来没有像你一样见过 row() 的用法。我去了[手册][1]l,看到了这个:
If you want a specific row returned you can submit the row number as a digit in the first parameter.
没有提及使用字符串作为字段名称。也许您的意思是:
$row = $user_query->row();
echo $row->user_id;
我相信它可以链接起来,所以 $user_query->row()->user_id
应该可以工作。
评论后编辑
使用参数化查询,这样更好,并且可以避免那些令人讨厌的转义问题:
$user_query = $this->CI->db->query("SELECT * FROM " . $this->CI->db->dbprefix . "
user WHERE username = ?
AND (password = SHA1(CONCAT(salt, SHA1(CONCAT(salt, SHA1(?))))) OR password = ?)
AND status = ?", array($username, $password, md5($password), 1));
关于php - Codeigniter $query->row() 方法不适用于字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24218908/