2013-04-05 40 views
4

MySQL允許這個錯誤:這個MySQL查詢有什麼問題。它提供了無效的參數個數錯誤

SQLSTATE[HY093]: Invalid parameter number 

此查詢:

public function getUserFriends($userId) { 
    $query = "SELECT users.id, users.firstName, users.lastName, users.thumbPic FROM friendships LEFT JOIN users ON ((friendships.user1 = users.id OR friendships.user2 = users.id) AND users.id <> :userId) WHERE (user1 = :userId OR user2 = :userId) AND friendships.status = 1"; 
    return $this->adapter->prepare($query)->execute(array(':userId' => $userId))->fetchAll(); 
} 

參數號看起來不錯我還是我失去了一些東西?

+0

不幸的是,你不能在查詢中多次重複使用相同的佔位符':userId'。 – 2013-04-05 18:16:06

+0

您使用:userId 3次。 – dikirill 2013-04-05 18:16:12

+6

_你不能在準備好的語句中兩次使用同名的命名參數標記_ http://php.net/manual/en/pdo.prepare.php – 2013-04-05 18:16:32

回答

2

不幸的是,你不能使用兩次相同的命名參數。你必須這樣完成你的目標:(我知道...跛腳,對嗎?)

public function getUserFriends($userId) { 
    $query = " 
     SELECT 
      users.id, users.firstName, users.lastName, users.thumbPic 
     FROM 
      friendships 
     LEFT JOIN 
      users ON 
       (friendships.user1 = users.id OR friendships.user2 = users.id) 
       AND users.id <> :userIdA 
     WHERE 
      (user1 = :userIdB OR user2 = :userIdC) 
      AND friendships.status = 1"; 
    return $this->adapter->prepare($query)->execute(array(
     ':userIdA' => $userId 
     ':userIdB' => $userId 
     ':userIdC' => $userId 
    ))->fetchAll(); 
}