gpt4 book ai didi

mysql - 如何删除多余的撇号

转载 作者:行者123 更新时间:2023-11-29 16:01:18 25 4
gpt4 key购买 nike

我编写了一个 SQL 查询来查找我的项目所需的输出。我工作得很好,输出正确。但是突然开始报错,并且在SQL查询中,有一些额外的撇号。如何解决它?

我尝试将查询添加到 $this->db->query(); 但仍然没有用。

public function getStudentConut($id) {
$this->db->select('students.id')
->from('students')
->join('bp','students.pbp = bp.id','left')
->where(condition 1)
->where(condition 2);
$query1 = $this->db->get_compiled_select();

$this->db->select('students.id')
->from('students')
->join('bp','students.dbp = bp.id','left')
->where(condition 1)
->where(condition 2);
$query2 = $this->db->get_compiled_select();

$this->db->select('COUNT(id) as stud_count')
->from('('.$query1." UNION ALL ".$query2.') X')
->group_by('X.id');

$results = $this->db->get();
return $results->num_rows();
}

它早些时候给出了正确的计数。但没有任何新的更改,它开始给出错误。

现在我收到错误:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '.id`` WHERE ``bp.some_value`` IS NULL AND ``students.`schoo' at line 2

SELECT COUNT(id) as stud_count FROM (SELECT students.id`` FROM ``students`` LEFT JOIN ``bp`` ON ``students.pbp`` = ``bp.id`` WHERE ``bp..Some other condition.. UNION ALL SELECT students.idFROMstudentsLEFT JOINbpONstudents.dbp=bp.id..some other condition....) X GROUP BYX.id`

最佳答案

我认为问题(至少对于双`)是CodeIgniter不太擅长子查询等。基本上每次你得到编译的 select 语句时,它已经有了转义标识符,然后你将它放在最后的 from 语句中,这将在其之上添加额外的转义标识符。

`->from('('.$query1." UNION ALL ".$query2.') X')`

不幸的是,与 set 等其他方法不同,from 没有第二个参数,允许您将转义设置为 false(我认为您需要的是) .

我建议尝试这个:

$this->db->_protect_identifiers = FALSE;
$this->db->select('COUNT(id) as stud_count')
->from('('.$query1." UNION ALL ".$query2.') X')
->group_by('X.id');
$results = $this->db->get();
$this->db->_protect_identifiers = TRUE;

并查看以下内容: ->where(condition 2); 我很确定由于缺少引号而不应编译。您可能不希望将此转义,因此您可以执行 ->where('condition 2', '', false); 按照: https://www.codeigniter.com/user_guide/database/query_builder.html#CI_DB_query_builder::where

当所有其他方法都失败时,只需知道 CodeIgniter 对“高级”查询有一些限制,也许您应该利用 $this->db->e​​scape_str(...)< 手动将其写为字符串 用于转义用户输入变量,$this->db->query(...) 用于运行 SQL。

关于mysql - 如何删除多余的撇号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56183185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com