我正在尝试为我的数据库实现一个非常基本的搜索引擎,其中用户可能包含不同类型的信息.搜索本身由几个联合选择组成,其中结果总是合并为3列.
然而,返回的数据是从不同的表中获取的.
每个查询使用$ term进行匹配,我将它作为准备参数绑定到":term".
现在,手册说:
调用PDOStatement :: execute()时,必须为要传递给语句的每个值包含唯一的参数标记.您不能在预准备语句中两次使用同名的命名参数标记.
我想,不是用termex替换每个:term参数:termX(x为term = n ++),必须有一个更好的解决方案吗?
或者我只需绑定X号:termX?
编辑发布我的解决方案:
$query = "SELECT ... FROM table WHERE name LIKE :term OR number LIKE :term";
$term = "hello world";
$termX = 0;
$query = preg_replace_callback("/\:term/", function ($matches) use (&$termX) { $termX++; return $matches[0] . ($termX - 1); }, $query);
$pdo->prepare($query);
for ($i = 0; $i < $termX; $i++)
$pdo->bindValue(":term$i", "%$term%", PDO::PARAM_STR);
Run Code Online (Sandbox Code Playgroud)
好的,这是一个样本.我没有时间使用sqlfiddle,但如果有必要,我会稍后添加一个.
(
SELECT
t1.`name` AS resultText
FROM table1 AS t1
WHERE
t1.parent = :userID
AND …Run Code Online (Sandbox Code Playgroud)