我正在尝试使用
进行子查询$this->db->where(" EXISTS (SELECT * FROM myTable)");
但是不行,它的输出是:myquery + WHERE 'EXISTS (SELECT * FROM myTable);
EXISTS 之前的引号使查询无法解析!
有谁知道如何解决吗?
请删除 EXISTS 关键字前后的空格。这样不会显示任何错误。
$this->db->where("EXISTS(SELECT * FROM myTable)");
也许你可以尝试使用
将转义设置为 false$this->db->where(" EXISTS (SELECT * FROM myTable)", null, false);
这是 DB_active_rec.php 中 where() 的片段
公共函数 where($key, $value = NULL, $escape = TRUE)
试试这个。
不要使用“where”子句,请写下完整的查询字符串并使用 $this->db->query(); 执行查询
$qry_string= $yourquery . "WHERE EXISTS (SELECT * FROM myTable)";
$this->db->query($qry_string);
为了避免编写原始 SQL 并确保在子查询中转义/引用,请使用
get_compiled_select()
来呈现子查询。 我假设您的子查询中有更多逻辑,但对于所提出的问题,您可以将表名称传递到 get_compiled_select()
中,并且 SELECT *
将是应用的默认 SELECT 子句。
一旦子查询安全呈现,您只需将
false
作为 where()
的第三个参数传递即可关闭其父 WHERE 子句中的转义。
$this->db->where('EXISTS (' . $this->db->get_compiled_select('myTable') . ')', null, false);
父查询的 WHERE 子句将呈现为:
WHERE EXISTS (SELECT * FROM `myTable`)