2016-11-18 82 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