我做一个查询,我有语法错误。但对我而言,我做得很好。Postgres,与查询错误
我在哪里有错误?
谢谢!
$str = "Moscow";
$data = $ci->crud_model->query(
'select * from "Cities" where "defaultName" ilike %'.$str.'%'
);
查询是:select * from "Cities" where "defaultName" ilike %Moscow%
我做一个查询,我有语法错误。但对我而言,我做得很好。Postgres,与查询错误
我在哪里有错误?
谢谢!
$str = "Moscow";
$data = $ci->crud_model->query(
'select * from "Cities" where "defaultName" ilike %'.$str.'%'
);
查询是:select * from "Cities" where "defaultName" ilike %Moscow%
的LIKE
/ILIKE
运营商需要两个字符串作为它的参数。也就是说,该模式必须是一个带引号的字符串,而不只是直接在SQL查询中。
所以不是:
"defaultName" ilike %Moscow%
您需要:
"defaultName" ilike '%Moscow%'
在PHP中,你应该是(至少是)逃逸的输入,以避免SQL注入。或许笨有逃逸,或使用参数化查询的功能,但最起码,你应该这样做:
$str = "Moscow";
$data = $ci->crud_model->query(
'select * from "Cities" where "defaultName" ilike \'%'.pg_escape_string($str).'%\''
);
编辑每克雷格·林格评论,正确的方法去逃避或建立安全的查询使用CodeIgniter是covered in this answer 。
这可能是最简单的(注意查询参数自动为一个字符串,并且不需要额外的引号):
$str = "Moscow";
$data = $ci->crud_model->query(
'select * from "Cities" where "defaultName" ilike ?',
array('%' . $str . '%')
);
谢谢这对我有用! – 2014-09-26 09:03:16
的关键词ILIKE可以用于替换LIKE,使根据所述活性区域设置的匹配不区分大小写的。这不在SQL标准中。 使它像到位ILIKE的
$str = "Moscow";
$data = $ci->crud_model->query('select * from Cities where defaultName LIKE %$str%');
然后你的查询会
select * from Cities where defaultName LIKE '%Moscow%';
对于ILIKE: 示例 -
SELECT first_name,last_name FROM customer WHERE first_name ILIKE 'BAR%';
这将返回行按照此条件:
BAR%模式匹配任何字符串开头的机智h BAR,Bar,BaR等。如果使用LIKE运算符,则查询不会返回任何行。 参考:http://www.postgresqltutorial.com/postgresql-like/
它不适用于我:( – 2014-09-26 08:34:48
你看到了什么...? 你在数据库中运行该查询,它显示什么错? – Naincy 2014-09-26 08:35:18
错误:语法错误处于或接近“%” LINE 1:select *从 “城市”,其中 “defaultName中” LIKE%莫斯科% – 2014-09-26 08:37:34
您需要环绕%莫斯科%引号:
select * from "Cities" where "defaultName" ilike' %Moscow%'
感谢编辑您的帖子对我来说是非常有帮助的 我的解决办法是\t \t \t'$数据= $ CI-> crud_model- >查询(“select * from \”Cities \“where \”defaultName \“ilike'%$ str%'”);' – 2014-09-26 09:01:20
'ilike'?它是一个更像人格化的SQL'like'版本吗? – CodeNewbie 2014-09-26 08:30:12
@CodeNewbie:只有PostGreSql提供关键字ILIKE可以用来代替LIKE根据活动语言环境使匹配不区分大小写。 – Naincy 2014-09-26 08:46:38
你是什么意思? – 2014-09-26 08:50:47