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

时间:2014-05-18 15:18:01

标签: php mysql sql codeigniter

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

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;
    }

请告诉我如何更改查询以解决此问题。

谢谢。

3 个答案:

答案 0 :(得分:2)

您的脚本中有2个错误:

第一

WHERE username LIKE username将无效,因为任何php变量的用户名应为$username

第二

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

WHERE `username` LIKE '$username'

答案 1 :(得分:0)

我不知道我是否理解你说实话是对的:所以你用管理员表中的用户名选择不起作用?

嗯,我想它应该是username LIKE $username。所以你忘记了$。

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

答案 2 :(得分:0)

$result = $this ->db -> query("select * from tablename where fname ='$string'");

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