2015-06-19 82 views
-1

我在互聯網上搜索,我沒有找到任何解決方案。多次使用PDO的綁定參數作爲變量

可以說我想在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

你可以加入包含參數值或(像我下面做)的完整搜索字符串額外的子查詢中。

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 
0

你不能在正常模式下這樣做。解決此問題的唯一方法是使用啓用了仿真模式的命名參數(PDO :: ATTR_EMULATE_PREPARES)。

但是,我通常建議不要這樣做,只是建議使用多個bindParam語句使用命名參數而不是問號。因此,您可以使用:searchname1和:searchname2都使用相同的POST/GET變量連接。