php - Codeigniter $query->row() 方法不适用于字符串参数

标签 php mysql codeigniter

我正在为我的库文件创建用户登录。但我的 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/

相关文章:

php - MVC 和 Mysql 概念困境 - 希望从 VIEW 中检索 mysql 数据以获取从 CONTROLLER 返回的项目列表

php - Codeigniter 命令行错误 - PHP fatal error : Class 'CI_Controller' not found

php - 存储网站首选项的最佳方式是什么?

php - 使用 PDO/PHP 获取数据并循环

php - 在 Laravel 中将依赖参数传递给 App::make() 或 App::makeWith()

mysql - 我如何将 dapp 连接到数据库(mysql)

php - UTF-8贯穿始终

php - 使用 codeigniter 将输出的表行添加到另一个表

php - 选择语法未正确显示(不确定是否重复)

mysql - 防止重复条目复合索引