CodeIgniter - 绑定 EXIST 子查询

Posted

技术标签:

【中文标题】CodeIgniter - 绑定 EXIST 子查询【英文标题】:CodeIgniter - Binding a EXIST subquery 【发布时间】:2017-05-28 01:44:54 【问题描述】:

首先,我是该框架的新手。检查我尝试使用 CI 数据库对象转录的查询。

$where = "(".$this->tbl.".invoiceNumber = '".substr($searchFor,3)."' 
          OR EXISTS (SELECT 1 FROM op_orders_products WHERE idProduct = ".(is_numeric(substr($searchFor,3)) ? substr($searchFor,3) : '-1')." 
          AND idOrder = ".$this->tbl.".id)
       )";

我应该做一个单独的子查询吗?想把这一切合二为一。

我就是这样开始的。我想确保变量是绑定的,而不是像原始查询中那样作为字符串传递。

$this->db->group_start()
           ->where($this->tbl.".invoiceNumber", substr($searchFor, 3))
           ->or_group_start()
             // I'm missing this EXISTS select subquery
           ->group_end()
         ->group_end()

非常感谢您的帮助。

【问题讨论】:

【参考方案1】:

据我所知,Codeigniter 的查询生成器类中没有 EXISTS 等价物。所以我会这样写:

$this->db->group_start()
             ->where($where)
         ->group_end()

参见文档here

binding:

使用 CodeIgniter,您可以像这样将变量绑定到您的查询:

$sql = "SELECT * FROM table WHERE a= ? AND b= ?";
$query = $this->db->query($sql, array($a,$b));

这会将变量 $a 和 $b 绑定到查询字符串中的相应位置 (?)。

escaping

$this->db->escape()

此函数转义字符串数据并在其周围添加单引号。

【讨论】:

嗨 Vickel,出于安全原因,我想在 $where 子句中绑定我的变量。

以上是关于CodeIgniter - 绑定 EXIST 子查询的主要内容,如果未能解决你的问题,请参考以下文章

CodeIgniter 是不是支持命名查询绑定?

使用CodeIgniter上的重复值查询数据绑定

在 CodeIgniter 中寻找一些 Javascript 类的好例子

我如何防止使用codeigniter进行sql注入[重复]

in exist,not in ,not exist

sql exist 优化查询速度