【问题标题】:PDO BindParam not working on Like statementPDO BindParam 不适用于 Like 语句
【发布时间】:2015-05-20 23:16:07
【问题描述】:

这是我的代码:

$sch = '%test%';

$select_search_query = "(
        SELECT 
            GROUP_CONCAT(name, ' ', surname) AS result
          FROM users
        WHERE 
        (
            email LIKE :sch OR 
            name LIKE :sch OR 
            surname LIKE :sch
        ) 
        AND 
            id_p = :ff_z
    )";

$prep_search_query = $connection->prepare($select_search_query);

$prep_search_query->bindParam(":sch", $sch);
$prep_search_query->bindParam(":ff_z", $id_p, PDO::PARAM_INT);

$prep_search_query->execute();

$array_search = $prep_search_query->fetchAll(PDO::FETCH_ASSOC);

print_r($array_search);

// The output is empty

花了两个小时,寻找可能的错误,我终于决定出来,因为我不知道为什么会这样......

我正在编写一个搜索页面,它必须使用 PDO 才能工作。上面的代码,不起作用,但是,下面的代码:

//$sch = '%test%';

$select_search_query = "(
        SELECT 
            GROUP_CONCAT(name, ' ', surname) AS result
          FROM users
        WHERE 
        (
            email LIKE '%test%' OR 
            name LIKE '%test%' OR 
            surname LIKE '%test%'
        ) 
        AND 
            id_p = 1
    )";

$prep_search_query = $connection->prepare($select_search_query);

$prep_search_query->execute();

$array_search = $prep_search_query->fetchAll(PDO::FETCH_ASSOC);

print_r($array_search);

// The output is a very long array

似乎问题出在LIKE,但我没有找到解决方案,我测试了很多东西,没有结果。谢谢!

【问题讨论】:

    标签: php mysql pdo


    【解决方案1】:

    不幸的是,当 PDO bindParam 时,您不能像您一样重复使用相同的占位符:

    email LIKE :sch OR 
    name LIKE :sch OR 
    surname LIKE :sch
    

    应该是这样的:

    email LIKE :sch1 OR 
    name LIKE :sch2 OR 
    surname LIKE :sch3
    

    然后在下面:

    $prep_search_query->bindValue(":sch1", $sch); //or bindParam I guess will work as well
    $prep_search_query->bindValue(":sch2", $sch);
    $prep_search_query->bindValue(":sch3", $sch);
    

    【讨论】:

    • 这是对的;这是 PDO 中命名绑定参数的限制,我们不能“重用”相同的命名参数。这个限制没有有据可查。
    • 谢谢,这就是问题所在!
    猜你喜欢
    • 1970-01-01
    • 2012-06-15
    • 1970-01-01
    • 2013-03-29
    • 2011-11-10
    • 2012-08-17
    • 2023-03-03
    • 2017-07-14
    相关资源
    最近更新 更多