这是我的代码:
$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);
关于php - PDO BindParam 不适用于 Like 语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30361937/