多次使用PDO的绑定参数作为变量

时间:2015-06-19 18:29:44

标签: mysql sql pdo prepared-statement

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

假设我想多次在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` ,'%')

谢谢

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

但是,我通常建议不要这样做,只是建议使用命名参数而不是问号来使用多个bindParam语句。因此,您可以使用:searchname1和:searchname2都使用相同的POST / GET变量连接。