使用mysql、php和pdo选择不区分大小写

使用mysql、php和pdo选择不区分大小写,php,mysql,pdo,Php,Mysql,Pdo,我试图从mysql表中选择一些数据,但我无法使Where比较不区分大小写,我尝试使用LOWER: $wildcard = $_GET['q']; $query = "SELECT id, name, departamento FROM gestionDoc_cargos WHERE (LOWER(name) LIKE '%' LOWER(:wildcard) '%' OR LOWER(departamento) LIKE '%' LOWER(:wildcard) '%')";

我试图从mysql表中选择一些数据,但我无法使Where比较不区分大小写,我尝试使用LOWER:

$wildcard = $_GET['q'];
        $query = "SELECT id, name, departamento FROM gestionDoc_cargos WHERE (LOWER(name) LIKE '%' LOWER(:wildcard) '%' OR LOWER(departamento) LIKE '%' LOWER(:wildcard) '%')";

        try{
            $result = DB::getInstance()->prepare($query);
            $result->bindParam(':wildcard', $wildcard, PDO::PARAM_STR);
            $result->execute();
            $result = $result->fetchAll(PDO::FETCH_ASSOC);
        }catch(PDOException $e){
            die($e->getMessage());
        }
        print_r($result);
        echo json_encode(array_values($result));
但我得到了以下错误:

SQLSTATE[42000]: Syntax error or access violation: 1064 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 'LOWER('C') '%' OR LOWER(departamento) LIKE '%' LOWER('C') '%')' at line 1
如果我从查询中删除下限,我会得到一个区分大小写的select。

...snip... ) LIKE '%' LOWER(:wildcard) '%' OR ...snip
这是不正确的。你有一个字符串(
“%”
),后面是一个函数调用(
LOWER()
),后面是另一个字符串,它们就在那里——没有连接逻辑,没有连接,等等

应该是

... LIKE CONCAT('%', LOWER(:wildcard), '%') OR ...

默认情况下,mysql比较不区分大小写,除非您强制进行
binary
比较,或者您在db/表上使用区分大小写的排序规则。

^^+1这家伙说的,比我快。您可以在MySQL文档中阅读更多关于区分大小写的内容。