Muhammad Sultan
Muhammad Sultan

Reputation: 473

Codeigniter Active Record syntax error

I've got database that have Challenge,Level and Course tables like this:

| ID | course_ID | Level_nbr

| ID | Level_ID | Challenge_nbr |

class course_model extends CI_Model{

    function get_level_id($course_id,$level_nbr)
    {
        $this->db->select('ID');
        $this->db->where('Course_ID',$course_id);
        $this->db->where('Level_nbr',$level_nbr);
        $query = $this->db->get('Level');
        return $query->row();
    }

    function get_challenge_id($course_id,$level_nbr,$challenge_nbr)
    {
        $level_id=$this->get_level_id($course_id,$level_nbr);
        $this->db->select('ID');
        $this->db->where('Level_ID',$level_id);
        $this->db->where('Challenge_nbr',$challenge_nbr);
        $query = $this->db->get('Challenge');
        return $query->row();
    }

    function get_challenge($course_id,$level_nbr,$challenge_nbr)
    {
        $challenge_id=$this->get_challenge_id($course_id,$level_nbr,$challenge_nbr);
        $this->db->select('Title,Text,Points,Init_Code');
        $this->db->where('ID',$challenge_id);
        $query = $this->db->get(`Challenge`);
        return $query->row();
    }

}

and when I call function in controller like this

$query = $this->course_model->get_challenge(1,$level,$challenge)

I've got this error: 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 'AND Challenge_nbr = '2'' at line 4

Upvotes: 1

Views: 59

Answers (1)

Burak Ozdemir
Burak Ozdemir

Reputation: 5332

What you get with $query->row() is an object so you need to return the ID property of that object.

function get_level_id($course_id,$level_nbr)
{
    $this->db->select('ID');
    $this->db->where('Course_ID',$course_id);
    $this->db->where('Level_nbr',$level_nbr);
    $query = $this->db->get('Level');
    return $query->row()->ID;
}

function get_challenge_id($course_id,$level_nbr,$challenge_nbr)
{
    $level_id=$this->get_level_id($course_id,$level_nbr);
    $this->db->select('ID');
    $this->db->where('Level_ID',$level_id);
    $this->db->where('Challenge_nbr',$challenge_nbr);
    $query = $this->db->get('Challenge');
    return $query->row()->ID;  
}

function get_challenge($course_id,$level_nbr,$challenge_nbr)
{
    $challenge_id = $this->get_challenge_id($course_id,$level_nbr,$challenge_nbr);
    $this->db->select('Title,Text,Points,Init_Code');
    $this->db->where('ID',$challenge_id);
    $query = $this->db->get('Challenge');
    return $query->row(); // this will return you an object too
}

Upvotes: 1

Related Questions