PDO BindParam 不适用于 Like 语句

PDO BindParam not working on Like statement

这是我的代码:

$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,但我没有找到解决方案,我测试了很多东西都没有结果。谢谢!

不幸的是,当 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);