【问题标题】:Use PDO's bind param multiple times as variable多次使用 PDO bindparam 作为变量
【发布时间】:2015-06-19 18:29:44
【问题描述】:

我在互联网上搜索,但没有找到任何解决方案。

假设我想在 PDO 中多次使用一个参数。

SELECT *
FROM `users`
INNER JOIN `user_names` ON `users`.`id`=`user_names`.`id`
WHERE `user_names`.`name` LIKE CONCAT('%', ? ,'%') OR `users`.`name` LIKE CONCAT('%', ? ,'%')

如何避免使用? 两次?我正在寻找这样的东西:

SELECT ? AS `search_name`, *
FROM `users`
INNER JOIN `user_names` ON `users`.`id`=`user_names`.`id`
WHERE `user_names`.`name` LIKE CONCAT('%', `search_name` ,'%') OR `users`.`name` LIKE CONCAT('%', `search_name` ,'%')

谢谢

【问题讨论】:

    标签: mysql sql pdo prepared-statement


    【解决方案1】:

    您可以加入一个额外的子选择,其中包含参数值或(如下所示)完整的搜索字符串。

    SELECT *
    FROM `users`
    INNER JOIN `user_names` ON `users`.`id`=`user_names`.`id`
    CROSS JOIN (SELECT CONCAT('%', x.name, '%') as SearchString) x
    WHERE `user_names`.`name` LIKE x.SearchString OR `users`.`name` LIKE x.SearchString
    

    【讨论】:

      【解决方案2】:

      您无法在正常模式下执行此操作。解决此问题的唯一方法是使用已打开仿真模式的命名参数 (PDO::ATTR_EMULATE_PREPARES)。

      然而,我通常建议不要这样做,只是建议使用多个 bindParam 语句,使用命名参数而不是问号。所以你可以使用 :searchname1 和 :searchname2 都连接到同一个 POST/GET 变量。

      【讨论】:

        猜你喜欢
        • 2014-08-20
        • 1970-01-01
        • 2017-02-24
        • 2012-05-23
        • 1970-01-01
        • 1970-01-01
        • 2013-02-25
        • 2011-12-27
        • 2011-04-13
        相关资源
        最近更新 更多