Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Ошибка в кол-ве параметров в PDO
Форумы портала PHP.SU » » Вопросы новичков » Ошибка в кол-ве параметров в PDO

Страниц (1): [1]
 

1. imper - 09 Июля, 2014 - 19:56:10 - перейти к сообщению
вот запросик, с 6 параметрами
PHP:
скопировать код в буфер обмена
  1. $sql_osn = "
  2.          SELECT chat_tema.id,chat_tema.id_user,chat_tema.tema, chat_tema.date, chat_tema.img,profile_user.name_user, profile_user.family_user
  3.        FROM  friends_iv,chat_tema,profile_user
  4.        WHERE chat_tema.id NOT IN(':tems') AND (friends_iv.id_user_ot = ':id_us1' OR friends_iv.id_user_pol = ':id_us2') AND friends_iv.readed = 1
  5.        AND ( (friends_iv.id_user_ot = ':id_us3' AND friends_iv.id_user_pol =  chat_tema.id_user) OR (friends_iv.id_user_ot =  chat_tema.id_user AND friends_iv.id_user_pol = ':id_us4' ) )
  6.        AND profile_user.id = chat_tema.id_user
  7.        ORDER BY chat_tema.id DESC LIMIT :cursor,20";


вот банальная вставка

PHP:
скопировать код в буфер обмена
  1. $sth = $db->pdo_obj->prepare($sql_osn);
  2.          
  3.       $id_user = intval($_SESSION['id']);
  4.       $cur = intval($_POST['cursor']);
  5.       $tems = strval($_SESSION['connect_tems']);//тут строка типа 113,114,115
  6.  
  7.  
  8.             $sth->bindParam(':id_us1', $id_user , PDO::PARAM_INT);
  9.  
  10.          if($get_data_sel_msg == "fri")
  11.          {
  12.             $sth->bindParam(':tems'  , $tems     , PDO::PARAM_STR);
  13.             $sth->bindParam(':id_us2', $id_user , PDO::PARAM_INT);
  14.             $sth->bindParam(':id_us3', $id_user , PDO::PARAM_INT);
  15.             $sth->bindParam(':id_us4', $id_user , PDO::PARAM_INT);
  16.          }
  17.             $sth->bindParam(':cursor', $cur    , PDO::PARAM_INT);
  18.             $sth->execute();
  19.        
  20.   echo json_encode($sth->fetchAll());




ну и вот такая ошибочка вылазиет

Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in блаблабла on line 72

с этой проблемой уже сталкивался но сейчас что то мои методы устранения своей невнимательности не помогают Недовольство, огорчение

помогите пожалуйста
2. Мелкий - 09 Июля, 2014 - 20:07:04 - перейти к сообщению
Зачем с именованными параметрами так наркоманить?
Раз нужен в запросе только один :id_us, один и используйте. Это именованные параметры, их можно использовать в одном запросе сколько угодно раз.
Для запроса
CODE (SQL):
скопировать код в буфер обмена
  1. SELECT :id_us, :id_us, :id_us

id_us достаточно забиндить только один раз.

И банальная логика утверждает, что запрос у вас один и тот же, но при разных $get_data_sel_msg == "fri" биндится разное число параметров.
3. imper - 09 Июля, 2014 - 20:17:10 - перейти к сообщению
базару ноль, я где то массивчик параметров делаю если они одного типа, но в парочке случаев мне нужно закидывать :id_us как PARAM_STR, так что вот так вот

Разобрался почему он ругался, нужно было одинарные скобочки убрать в запросе которые обрамляли параметры...

ну это так, вдруг кто с такой проблемкой сталкнёться, и обязательно преобразовывать типы явно

 

Powered by ExBB FM 1.0 RC1