首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >多次使用绑定参数

多次使用绑定参数
EN

Stack Overflow用户
提问于 2013-08-29 20:56:09
回答 5查看 25.3K关注 0票数 36

我正在尝试为我的数据库实现一个非常基本的搜索引擎,其中用户可以包含不同种类的信息。搜索本身由两个联合选择组成,其中结果总是合并到3列中。

然而,返回的数据是从不同的表中获取的。

每个查询都使用$term进行匹配,我已经将它绑定到":term“作为一个准备好的参数。

现在,手册上写道:

execute调用PDOStatement::

()时,对于要传递给语句的每个值,必须包括一个唯一的参数标记。在预准备语句中,不能两次使用同名的命名参数标记。

我想,与其将每个:term参数替换为: term X (x表示term= n++),还有没有更好的解决方案?

或者我只需要绑定X个:termX?

编辑将我的解决方案发布到以下位置:

代码语言:javascript
复制
$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);

好的,这是一个例子。我没有时间使用sqlfiddle,但如果需要的话,我会在以后添加一个。

代码语言:javascript
复制
(
    SELECT
        t1.`name` AS resultText
    FROM table1 AS t1
    WHERE
        t1.parent = :userID
        AND
        (
            t1.`name` LIKE :term
            OR
            t1.`number` LIKE :term
            AND
            t1.`status` = :flagStatus
        )
)
UNION
(
    SELECT
        t2.`name` AS resultText
    FROM table2 AS t2
    WHERE
        t2.parent = :userParentID
        AND
        (
            t2.`name` LIKE :term
            OR
            t2.`ticket` LIKE :term
            AND
            t1.`state` = :flagTicket
        )
)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18511645

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档