CodeIgniter db error: real_scape_string() on boolean
10:43 29 May 2018

I'm facing this error in my model function:

An uncaught Exception was encountered

Type:        Error
Message:     Call to a member function real_escape_string() on boolean
Filename:    /var/www/html/project/system/database/drivers/mysqli/mysqli_driver.php
Line Number: 391

Backtrace:
    File: /var/www/html/project/application/models/FeedCompanies.php
    Line: 125
    Function: where

This is the function:

public function getCompanyMessages($idCompany)
{
    $usersModel     = $this->modelslibrary->getModelUsers();
    $companiesModel = $this->modelslibrary->getModelCompanies();

    $where = array(
        $usersModel->table_name.'.id_company' => $idCompany,
        $this->table_name.'.deleted'          => 'N'
    );

    $this->db->select(
        $this->table_name.'.'.$this->primary_key.', '.
        $this->table_name.'.token, '.
        $usersModel->table_name.'.id_company, '.
        $usersModel->table_name.'.slug, '.
        $this->table_name.'.id_user, '.
        $this->table_name.'.message, '.
        $this->table_name.'.posted_as_company, '.
        $this->table_name.'.likes, '.
        $this->table_name.'.created_at, 
        getUserName('.$usersModel->table_name.'.name, '.$usersModel->table_name.'.last_name) as name,
        getProfilePhotoURL('.$usersModel->table_name.'.profile_photo) as profile_photo,
        getCompanyLogo('.$companiesModel->table_name.'.logo) as company_logo, '.
        $companiesModel->table_name.'.name as company_name'
    );

    $this->db->join($usersModel->table_name, $usersModel->table_name.'.'.$usersModel->primary_key.' = '.$this->table_name.'.id_user');
    $this->db->join($companiesModel->table_name, $companiesModel->table_name.'.'.$companiesModel->primary_key.' = '.$usersModel->table_name.'.id_company');
    $this->db->where($where);
    $this->db->order_by($this->table_name.'.created_at ASC');

    $queryResult = $this->db->get($this->table_name);

    if (!$queryResult) return null;

    $messages = $queryResult->result_array();

    if (!$messages) return null;

    return $messages;
}

The line 125 is $this->db->where($where);, so I wrote an echo(var_export($where, true)); before this to get the content of $where array, and the content is just this:

array (
   'users.id_company' => 2,
   'feed_companies.deleted' => 'N',
)

Why am I having this error and how to solve it?

My environment is:

  • CodeIgniter 3.0.4
  • PHP 7.2.5
  • Ubuntu 16.04
  • MySQL Server 5.7.22
  • Apache 2.4.18

And here is my config/database.php:

$active_group = 'default';
$query_builder = TRUE;

$db['default'] = array(
    'dsn'   => '',
    'hostname' => '127.0.0.1',
    'username' => '{{user}}',
    'password' => '{{password}}',
    'database' => '{{database}}',
    'dbdriver' => 'mysqli',
    'dbprefix' => '',
    'pconnect' => FALSE,
    'db_debug' => (ENVIRONMENT !== 'production'),
    'cache_on' => FALSE,
    'cachedir' => '',
    'char_set' => 'utf8',
    'dbcollat' => 'utf8_general_ci',
    'swap_pre' => '',
    'encrypt' => FALSE,
    'compress' => FALSE,
    'autoinit' => TRUE,
    'stricton' => FALSE,
    'failover' => array(),
    'save_queries' => TRUE
);

--- EDIT ---

As asked, here is the content of my model FeedCompanies.php:

db = $ci->db;

        $this->load->library('modelslibrary');
    }

    public function storeMessage($insertFields)
    {
        $insertFields['created_at'] = date("Y-m-d H:i:s");

        $this->db->insert($this->table_name, $insertFields);

        return $this->db->insert_id();
    }

    public function getMessage($where)
    {
        $usersModel     = $this->modelslibrary->getModelUsers();
        $companiesModel = $this->modelslibrary->getModelCompanies();

        // sending only id
        if (is_numeric($where)) {
            $where = array($this->table_name.'.'.$this->primary_key => $where);
        } else {
            // setting table name as prefix of each field in where clause to avoid conflict
            foreach ($where as $key => $value) {
                unset($where[$key]);

                $where[$this->table_name . '.' . $key] = $value;
            }
        }

        $where[$this->table_name.'.deleted'] = 'N';

        $this->db->select(
            $this->table_name.'.'.$this->primary_key.', '.
            $this->table_name.'.token, '.
            $usersModel->table_name.'.id_company, '.
            $usersModel->table_name.'.slug, '.
            $this->table_name.'.id_user, '.
            $this->table_name.'.message, '.
            $this->table_name.'.posted_as_company, '.
            $this->table_name.'.likes, '.
            $this->table_name.'.created_at,
            getUserName('.$usersModel->table_name.'.name, '.$usersModel->table_name.'.last_name) as name,
            getProfilePhotoURL('.$usersModel->table_name.'.profile_photo) as profile_photo,
            getCompanyLogo('.$companiesModel->table_name.'.logo) as company_logo, '.
            $companiesModel->table_name.'.name as company_name'
        );

        $this->db->join($usersModel->table_name, $usersModel->table_name.'.'.$usersModel->primary_key.' = '.$this->table_name.'.id_user');
        $this->db->join($companiesModel->table_name, $companiesModel->table_name.'.'.$companiesModel->primary_key.' = '.$usersModel->table_name.'.id_company');
        $this->db->where($where);

        $queryResult = $this->db->get($this->table_name);

        if (!$queryResult) return null;

        $message = $queryResult->result_array();

        if (!$message) return null;

        return $message[0];
    }

    public function getCompanyMessages($idCompany)
    {
        $usersModel     = $this->modelslibrary->getModelUsers();
        $companiesModel = $this->modelslibrary->getModelCompanies();

        $where = array(
            $usersModel->table_name.'.id_company' => $idCompany,
            $this->table_name.'.deleted'          => 'N'
        );

        $this->db->select(
            $this->table_name.'.'.$this->primary_key.', '.
            $this->table_name.'.token, '.
            $usersModel->table_name.'.id_company, '.
            $usersModel->table_name.'.slug, '.
            $this->table_name.'.id_user, '.
            $this->table_name.'.message, '.
            $this->table_name.'.posted_as_company, '.
            $this->table_name.'.likes, '.
            $this->table_name.'.created_at, 
            getUserName('.$usersModel->table_name.'.name, '.$usersModel->table_name.'.last_name) as name,
            getProfilePhotoURL('.$usersModel->table_name.'.profile_photo) as profile_photo,
            getCompanyLogo('.$companiesModel->table_name.'.logo) as company_logo, '.
            $companiesModel->table_name.'.name as company_name'
        );

        $this->db->join($usersModel->table_name, $usersModel->table_name.'.'.$usersModel->primary_key.' = '.$this->table_name.'.id_user');
        $this->db->join($companiesModel->table_name, $companiesModel->table_name.'.'.$companiesModel->primary_key.' = '.$usersModel->table_name.'.id_company');
        $this->db->where($where);
        $this->db->order_by($this->table_name.'.created_at ASC');

        $queryResult = $this->db->get($this->table_name);

        if (!$queryResult) return null;

        $messages = $queryResult->result_array();

        if (!$messages) return null;

        return $messages;
    }

    public function updateMessage($idMessage, $updateFields)
    {
        $updateFields['updated_at'] = date("Y-m-d H:i:s");

        $this->db->where($this->primary_key, $idMessage);

        return $this->db->update($this->table_name, $updateFields);
    }

    public function destroyMessage($idMessage)
    {
        $updateFields['deleted'] = 'Y';

        return $this->updateMessage($idMessage, $updateFields);
    }
}
php codeigniter mysqli codeigniter-3