我無法查詢到是使用MySQL和Drupal 7.這是我的模塊代碼不區分大小寫:Drupal的7 - 不區分大小寫的LIKE與db_select
$results = db_select('people_table', 'p')->fields('p');
if (array_key_exists('department', $_GET)) {
$results->condition('Department', '%' . db_like($_GET['department']) . '%', 'LIKE');
}
return $results->orderBy('Name', 'ASC')->execute();
在URL中?department=Chemistry
,我得到三個結果。在URL中使用?department=chemistry
,我無法獲得結果。當我嘗試$results->condition('UPPER(Department)'...
,我得到這個錯誤:
PDOException: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'UPPERDepartment' in 'where clause': SELECT p.* FROM {people_table} p WHERE (UPPERDepartment LIKE :db_condition_placeholder_0 ESCAPE '\\') ORDER BY Name ASC;
所以看起來它吃我的括號內。我該如何做一個不區分大小寫的LIKE
?
編輯:上Department
柱以及在整個表的核對是utf8_bin
。 This answer表示「唯一特別的是用於比較二進制格式的字符的utf8_bin」。我不知道爲什麼選擇這個排序規則,因爲表中的所有數據都是英文文本。我可能會將排序規則更改爲utf8_general_ci。
你有你的代碼中的SQL注入,請參閱:http://stackoverflow.com/questions/332365/xkcd-sql-injection-please-explain我想你已經設法繞過PDO成功:-) – Johan
即使在二進制排序規則上,LIKE也總是不區分大小寫。 – Johan
這裏如何進行SQL注入?我認爲在'db_select()'中使用'condition()'函數的意義在於它會逃避你的輸入。 –