【问题标题】:Select case insensitive using mysql, php and pdo使用 mysql、php 和 pdo 选择不区分大小写
【发布时间】:2015-08-31 06:34:51
【问题描述】:

我正在尝试从 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

如果我从查询中删除 LOWER,我会得到一个区分大小写的选择。

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    这个

    ...snip... ) LIKE '%' LOWER(:wildcard) '%' OR ...snip
    

    不正确。你有一个字符串('%'),然后是一个函数调用(LOWER()),然后是另一个字符串,它们只是坐在那里 - 没有连接逻辑,没有连接,等等等等。

    应该是

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

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

    【讨论】:

    猜你喜欢
    • 2014-05-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-16
    • 1970-01-01
    • 2011-04-13
    • 1970-01-01
    • 2014-05-22
    相关资源
    最近更新 更多