2016-07-24 50 views
0
 $sth = $dbh->prepare("SELECT users.userID,fname,lname,status FROM users INNER JOIN friends ON users.userID = friends.friendID WHERE friends.userID = ? AND ((friends.status LIKE 'group%' OR friends.status = 'friends') OR (users.status = '?') OR (users.userID = ?)) ORDER BY friends.status,lname,fname ASC"); 
    $sth->execute(array($_SESSION['userID'],'sub:'.$_SESSION['userID'],$_SESSION['userID'])); 

在上面的代碼中,您可以看到我有一個帶查詢的準備語句。在該查詢中,我有三個問號用於變量替換。在執行語句中,我提供了變量。最後我檢查了一下,我可以數到三,但PHP不同意。我一直收到執行所在行的「無效參數編號:綁定變量數量與令牌數量不匹配」。如果我使用冒號,PHP綁定參數數據庫調用的參數數量錯誤

我認爲這可能與第二個參數中的冒號有關,所以我把它拉出來,但它做了同樣的事情。我甚至拿出字符串連接,只留下了用戶ID,我得到了同樣的東西。

要麼是真的很晚,要麼是在這裏發生一些伏都教。任何見解?

回答

1

這個'?'不是佔位符,它是一個字面問號。佔位符不會被引用。正如你有兩個佔位符,三個值試圖綁定。

所以嘗試:

$sth = $dbh->prepare("SELECT users.userID,fname,lname,status FROM users INNER JOIN friends ON users.userID = friends.friendID WHERE friends.userID = ? AND ((friends.status LIKE 'group%' OR friends.status = 'friends') OR (users.status = ?) OR (users.userID = ?)) ORDER BY friends.status,lname,fname ASC"); 
+0

謝謝。這讓我瘋狂,我不知道我是否會在昨天晚上沒有那麼疲憊的時候想出來。所以我們必須依靠PHP來智能地插入它們。就這樣吧。 –

相關問題