Ошибка базы данных CodeIgniter: real_scape_string () на логическом значении

Я столкнулся с этой ошибкой в ​​своей модельной функции:

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

Это функция:

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

Строка 125 - это $this->db->where($where);, поэтому я написал echo(var_export($where, true)); перед этим, чтобы получить содержимое массива $ где, и это содержимое выглядит следующим образом:

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

Почему у меня возникает эта ошибка и как ее решить?

Моя среда:

  • CodeIgniter 3.0.4
  • PHP 7.2.5
  • Ubuntu 16.04
  • Сервер MySQL 5.7.22
  • Apache 2.4.18

А вот и мой 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
);

--- РЕДАКТИРОВАТЬ ---

Как я и просил, вот содержимое моей модели FeedCompanies.php:

<?php
namespace Application\Models;

use MY_Model;

defined('BASEPATH') OR exit('No direct script access allowed');

require_once (APPPATH.'/libraries/traits/Log.php');


class FeedCompanies extends MY_Model
{
    use \Log;

    public $table_name  = 'feed_companies'; // set the name of the table for this model.
    public $primary_key = 'id'; // set the primary key

    private $db;

    public function __construct()
    {
        parent::__construct();

        $ci =& get_instance();

        $this->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);
    }
}

FeedCompanies могут добавлять содержимое этого файла.

prasanna puttaswamy 29.05.2018 19:24

попробуйте с изменениями 'hostname' => 'localhost', 'username' => 'root', 'password' => '',

Pradeep 29.05.2018 19:46

@prasannaputtaswamy Я добавил содержимое файла FeedCompanies.

Thiago B. Bittencourt 29.05.2018 20:27

@pradeep учетные данные для подключения к базе данных здесь не проблема. Я могу подключиться и использовать свое приложение с этими учетными данными.

Thiago B. Bittencourt 29.05.2018 20:28

попробуйте $ this-> db-> where ($ where, NULL, FALSE); посмотри, что получишь. это не экранирующая строка. если он работает, значит проблема в массиве

prasanna puttaswamy 29.05.2018 20:54

@prasannaputtaswamy, когда я это делаю, функция удаляет цитату 'feed_companies.deleted' => 'N' и возвращает ошибку Unknown column 'N' in 'where clause'

Thiago B. Bittencourt 30.05.2018 00:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
6
1 830
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Ну, я не понял ни проблемы, ни решения. Итак, чтобы обойти это, я заранее создал полный запрос и выполнил его с помощью метода query().

Сюда:

$query = $this->db->get_compiled_select();

$queryResult = $this->db->query($query);

И теперь все работает.

Другие вопросы по теме