База данных связанных параметров PHP вызывает неправильное количество параметров, если я использую двоеточие

$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'])); 

В приведенном выше коде вы можете видеть, что у меня есть оператор подготовки с запросом. В этом запросе у меня есть три вопроса для замены переменных. В инструкции execute я предоставляю переменные. Последнее, что я проверил, могу считать до трех, но PHP не согласен. Я продолжаю получать «Недопустимый номер параметра: количество связанных переменных не совпадает с числом токенов» для строки, где выполняется выполнение.

Я думал, что это может быть связано с двоеточием во втором параметре, поэтому я вытащил это, но он сделал то же самое. Я даже вытащил конкатенацию строк и просто оставил идентификатор пользователя, и я получил то же самое.

Либо это действительно поздно, либо здесь происходит несколько вуду. Какие-нибудь идеи?

Это '?' не является заполнителем, это буквальный знак вопроса. Заполнитель не цитируется. Как и у вас есть два заполнителя, и три значения пытались связать.

Поэтому постарайтесь:

 $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");