使用 codeigniter 将变量传递给 SELECT 子句

Posted

技术标签:

【中文标题】使用 codeigniter 将变量传递给 SELECT 子句【英文标题】:passing variable into SELECT clause with codeigniter 【发布时间】:2014-07-06 13:42:36 【问题描述】:

这是我的模型,仅在我查询一个表时有效:

function cari_username()
    
        $username = $this->input->post('username');
        $this->db->like('username',$username);
        $data = $this->db->get('user');
        return $data;
    

我需要的是连接多个表中的数据,但现在我的代码失败了:

function cari_username()
    
        $this->db->from('user');
        $username = $this->input->post('username');
        $data = $this->db->query("SELECT * FROM (SELECT user.id_user,mahasiswa.nama,user.password,user.username 
           FROM (`mahasiswa`) 
           LEFT JOIN `pendaftaran_anggota` ON `pendaftaran_anggota`.`nim` = `mahasiswa`.`nim`
           LEFT JOIN `anggota` ON `pendaftaran_anggota`.`id_anggota` = `anggota`.`id_anggota` 
           LEFT JOIN `user` ON `user`.`id_user` = `anggota`.`id_user` UNION 
           SELECT pelatih.id_user, pelatih.nama,user.password,user.username FROM (`pelatih`)
           LEFT JOIN `user` ON `user`.`id_user` = `pelatih`.`id_user` UNION 
           SELECT admin.id_user, admin.nama, user.password,user.username FROM (`admin`)
           LEFT JOIN `user` ON `user`.`id_user` = `admin`.`id_user`) userdata WHERE `username` LIKE username
            ORDER BY `userdata`.`id_user`
             ");

        return $data;
    

请告诉我如何更改查询来解决这个问题。

谢谢。

【问题讨论】:

喜欢用户名的意思是等于。只是猜测,因为我没有使用过 CodeIgniter,但如果 db->like 将通配符放入 Like '%Smith%' 中,则您的查询不是...... 【参考方案1】:

您的脚本中有 2 个错误:

第一:

WHERE username LIKE username 不起作用,因为像任何 php 变量一样的用户名应该是 $username

秒:

mysql 不知道 $username 是哪种变量,但我们知道它是一个字符串。因此,您需要将其放在单引号内:

WHERE `username` LIKE '$username'

【讨论】:

【参考方案2】:

老实说,我不知道我是否理解您的正确:所以您通过用户名从管理表中进行的选择不起作用?

我想应该是username LIKE $username。所以你忘记了美元。

LEFT JOIN `user` ON `user`.`id_user` = `admin`.`id_user` userdata WHERE `username` LIKE $username ORDER BY `userdata`.`id_user`

【讨论】:

谢谢。我尝试这样,例如我搜索用户名“rian”,而不是结果数据库错误,因为“where 子句”中的未知列“rian”。那怎么样? 是的,我想通过用户名从管理员表中选择名称到用户表。 确保您的查询看起来像我在上面的帖子中发布的那个。 (我刚刚编辑了我的帖子)看起来您还使用变量值来定义将用于选择的列,这是错误的。 SELECT * FROM (SELECT user.id_user,mahasiswa.nama,user.password,user.username FROM LEFT JOIN user ON user.id_user = admin.id_user ) userdata WHERE username LIKE rian ORDER BY userdata.id_user “where 子句”中的未知列“rian”【参考方案3】:
$result = $this ->db -> query("select * from tablename where fname ='$string'");

不要忘记在创建模型的函数中传递$string

【讨论】:

以上是关于使用 codeigniter 将变量传递给 SELECT 子句的主要内容,如果未能解决你的问题,请参考以下文章

Ajax 请求 Codeigniter

无法将变量从控制器传递到模型以处理codeigniter中的多个上载字段

Codeigniter:将数据从控制器传递到视图

Codeigniter - 使用 json 将单个查询结果传递给控制器​​ - 如果存在

将变量从视图传递到视图 codeigniter

将 codeigniter $data['foo'] 从控制器传递给视图