繁体   English   中英

在CodeIgniter MySQL查询中获取额外空格

[英]Getting extra spaces in CodeIgniter MySQL query

我正在尝试运行的查询的代码是

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get();

$items = $query->num_rows();

Mysql查询字符串是

SELECT replace(name, ' = ', ' ') FROM `items`

代码正在做的是在编译查询时在“=”之前和之后添加一个空格,导致“=”返回没有结果,因为名称中没有带“=”的项,只有“=”。

foo=bar, replace(name, '=', ' ') returns 1 result.
foo = bar, replace(name, ' = ', ' ') returns 0 results.

我正在使用的CodeIgniter版本是:3.0.6

我在我的CodeIgniter副本上测试了这个,当这样格式化时它可以正常工作:

$items = $this->db->like("replace(name, '=', ' ')", "foo bar", 'both')->get('items')->num_rows();

几点说明:

  1. 你不需要from(),你可以将表格滑入get()方法。
  2. 您可以链接您的方法,因此您只需要分配一个变量。
  3. 省略select()方法意味着选择('*')。

你的语法

$query = $this->db->select("*")->from('items')->like("replace(name, '=', ' ')", "foo bar", 'both')->get();

事实上这里显示的是产生这个查询

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo bar%';

如果在foo和bar之间偶然出现一个空格则会失败。

试试这个替代查询

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo% bar%';

$query = $this->db->select('*')->from('items')->like("replace(name, '=', ' ')", "foo% bar", 'both')->get();

或者这个查询甚至更好

SELECT * FROM `items` WHERE CONCAT(TRIM(SUBSTRING_INDEX(name, '=', 1)),' ',TRIM(SUBSTRING_INDEX(name, '=', -1))) LIKE '%foo bar%';

不要使用它

SELECT * FROM `items` WHERE replace(name, '=', ' ') LIKE '%foo%bar%';

这些查询的结果显示在此处

你可以有一个删除前导/尾随空格的查询( 例子

我找不到与codeigniter或php相关联的方法调用replace()

尝试str_replace(find,replace,string)

$one = 'as = bb = cc=dd ';
$var = str_replace('=', ' ', $one);
echo $var;

phpfiddle预览

并且不要在查询中重构代码。 使其干净并将其传递给查询。 它也很容易跟踪错误。

我用了

$this->db->query()

代替

$this->db->select();
$this->db->order_by();
$this->db->get();

它对我有用。

我的疑问是:

$records = $this->db->select(
"id,( select count(*) from 
( select 
        unnest(string_to_array(mycol,',')) v
        from mytable ) t where v::int > 0) as total",
FALSE)->order_by("col1")->get("mytable1")->result_array();

问题是,它在string_to_array(mycol,', ')添加了一个额外的空间,这给了错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM