我在互联网上搜索,但我找不到任何解决方案。
假设我想多次在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` ,'%')
谢谢
答案 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变量连接。