我做一個查詢,我有語法錯誤。但對我而言,我做得很好。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