воспламенитель кода добавить обратную цитату запрос

у меня проблема с запросом codeigniter, запрос следующий.

Это мой метод:

public function CargarProceso($idUsuario, $estatus)
    {

      $joinQuery = 'procesos_cotizaciones.proveedor =';
      $joinQuery .= (string) $idUsuario;
      $joinQuery .=  ' AND procesos_cotizaciones.estatus =';
      $joinQuery .= "\"".$estatus."\"";
      $joinQuery .= ' AND procesos_cotizaciones.proceso = planos_procesos.id';

      $this->db->select('procesos_cotizaciones.proveedor,procesos_cotizaciones.estatus, planos_procesos.proceso, planos_proyecto.nombre_archivo');
      $this->db->from('procesos_cotizaciones');
      $this->db->join('planos_procesos', $joinQuery, 'inner');
      $this->db->join('planos_proyecto','planos_procesos.plano = planos_proyecto.id','inner');
      $this->db->group_by('planos_proyecto.nombre_archivo', 'asc');

      $query = $this->db->get();
      //var_dump($query);
      return $query;
    }

строка в $joinQuery:

"procesos_cotizaciones.proveedor =90004 AND procesos_cotizaciones.estatus ="ORDEN DE COMPRA" AND procesos_cotizaciones.proceso = planos_procesos.id" 

но верните запрос к базе данных с ошибкой, потому что codeigniter добавляет обратную кавычку в запрос и отправляет в mysql.

SELECT `procesos_cotizaciones`.`proveedor`, `procesos_cotizaciones`.`estatus`, `planos_procesos`.`proceso`, `planos_proyecto`.`nombre_archivo` FROM `procesos_cotizaciones` INNER JOIN `planos_procesos` ON `procesos_cotizaciones`.`proveedor` =90004 AND `procesos_cotizaciones`.`estatus` ="ORDEN DE `COMPRA"` AND `procesos_cotizaciones`.`proceso` = `planos_procesos`.`id` INNER JOIN `planos_proyecto` ON `planos_procesos`.`plano` = `planos_proyecto`.`id` ORDER BY `planos_proyecto`.`nombre_archivo` ASC

обратная цитата добавлена ​​к Compra"


person huggo    schedule 31.07.2018    source источник
comment
Что такое $estatus и почему он вставляется в запрос без какого-либо экранирования?   -  person tadman    schedule 31.07.2018
comment
извините, переменная $estatus является строковым параметром, который получает функцию, например, 'cotizado' или 'EN NEGOCIACION'.   -  person huggo    schedule 31.07.2018
comment
я редактирую код, я надеюсь, что был более явным   -  person huggo    schedule 31.07.2018
comment
Я понимаю. Я имею в виду, что очень рискованно просто вставлять это в запрос. Вы должны, по крайней мере, избежать этого.   -  person tadman    schedule 31.07.2018


Ответы (1)


Надеюсь, это поможет вам:

$this->db->join() принимает необязательный четвертый параметр. Если вы установите значение FALSE, CodeIgniter не будет пытаться защитить ваши имена полей или таблиц.

$this->db->select('procesos_cotizaciones.proveedor,procesos_cotizaciones.estatus, planos_procesos.proceso, planos_proyecto.nombre_archivo');
$this->db->from('procesos_cotizaciones');
$this->db->join('planos_procesos', $joinQuery, 'inner', FALSE);
$this->db->join('planos_proyecto','planos_procesos.plano = planos_proyecto.id','inner', FALSE);
$this->db->order_by('planos_proyecto.nombre_archivo', 'asc');

$query = $this->db->get();
return $query;

подробнее: https://www.codeigniter.com/user_guide/database/query_builder.html#CI_DB_query_builder::join

person Pradeep    schedule 31.07.2018