2016-11-18 32 views
1

我原本有一个SQL语句,这样的:分配相同的参数值在PDO多次执行

SELECT *, COUNT(friend_one) AS pending_count , COUNT(friend_two) AS requests_sent 
FROM friends 
WHERE friend_one OR friend_two = ? 
AND status = ? 

在我指定我的参数,如:

$pending_friend_count_stmt->execute(array($user_id, $status_one)); 

但是,查询不得到我想要的结果。有人向我展示了一种不同的方式,但它多次使用变量$user_id,所以我不知道如何调整代码以使用参数。

这里你可以看到新的查询:在你的问题然而

http://rextester.com/KSM73595

我是否能够只是做

SELECT COUNT(CASE WHEN `friend_one` = ? THEN 1 END) as `requests_count`, 
     COUNT(CASE WHEN `friend_two` = ? THEN 1 END) as `pending_count` 
FROM `friends` 
WHERE ? IN (`friend_one` , `friend_two`) 
    AND `status` = ? 

$pending_friend_count_stmt->execute(array($user_id, $user_id, $user_id $status_one)); 
+0

使用命名参数':userid'而不是''喂奶时'[ '用户id'=> $ USER_ID]'执行。 – Xorifelse

+0

@Xorifelse我可以把它们放在执行中吗? execute(array(':userid',$ user_id,$ status_one)); – Paul

+0

更新了评论,但请记住,你不能混用它们,所以都必须命名。 – Xorifelse

回答

4

使用PDO,你必须使用命名参数的能力,你想要使用多个值的1个参数,这意味着仿真必须打开:

$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 

现在你可以做到以下几点:

$stmt = $db->prepare("SELECT * FROM table WHERE userid = :userid AND userid = :userid"); 

$stmt->excecute([ 
    ':userid' => 1 
]); 

结果造成:

"SELECT * FROM table WHERE userid = 1 AND userid = 1" 
+0

再次感谢您的帮助。 – Paul