【问题标题】:How can we remove round brackets around table name in codeigniter?我们如何在 codeigniter 中删除表名周围的圆括号?
【发布时间】:2018-02-01 11:25:59
【问题描述】:

我正在处理 codeigniter 项目,我需要将整个数据库 mysql 迁移到 sql server,因为我在选择查询中遇到问题,我可以看到在 sql server 中,表名周围不支持圆括号,这是我的代码点火器查询

$this->db->_protect_identifiers=false;
$this->db->select('*')->from('tb_card',false);
$this->db->where('company_id',$this->company_id,FALSE)->get()->row_array();

此选择查询生成以下查询

SELECT * FROM (tb_card) WHERE company_id = 27

您可以看到表格名称周围有圆括号,我想删除它,谁能帮我解决这个问题?

【问题讨论】:

  • 听起来像是一个潜在的 X-Y 问题。为什么要删除它?
  • @JonStirling sql server 不支持这个查询所以
  • 啊,是的,应该做的不仅仅是略读这个问题。 :P
  • 进行一些搜索,您是否更新了配置以使用正确的数据库驱动程序?括号似乎来自那些。
  • @JonStirling 我正在使用 odbc 驱动程序

标签: php codeigniter


【解决方案1】:

终于解决了 (/system/database/drivers/odbc/odbc_driver.php 在这个路径中需要像这样改变功能

function _from_tables($tables)
    {
        /*if ( ! is_array($tables))
        {
            $tables = array($tables);
        }

        return '('.implode(', ', $tables).')';*/
                if ( ! is_array($tables))
                {
                    return strstr($tables, ',') ? '('.$tables.')' : $tables;
                }
                else
                {
                    return count($tables) > 1 ? '('.implode(', ', $tables).')' : end($tables);
                }
    }

【讨论】:

    【解决方案2】:

    你能不能使用简单的$this->db->query($sql) 方法,而不是 Active Record。

    $result = $this->db->query('SELECT * FROM tb_card WHERE company_id = 27');
    printr($this->db->last_query());
    printr($result->result());
    

    【讨论】:

      【解决方案3】:

      如果你想选择*(全部),你可以使用$this->db->get(); 例如,是这样的......

      function getcompany($company_id)
             {
               $this->db->where('company_id',$company_id);
               $query = $this->db->get('tb_card');
               return $query->result();
             }
      

      那些函数会像这样返回

      SELECT * FROM 'tb_card' WHERE 'company_id' = $company_id
      

      希望它回答你的问题。

      【讨论】:

        【解决方案4】:

        请在表名tb_card中使用这个弧秒符号

        $this->db->_protect_identifiers=false; $this->db->select('*')->from('`tb_card`',false); $this->db->where('company_id',$this->company_id,FALSE)->get()->row_array();
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-08-18
          • 2015-03-01
          • 2020-05-28
          • 2019-03-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多