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
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: Не работает PDO запрос с LIMIT и IN
ошибка: Warning: PDOStatement::execute() [pdostatement.execute]: SQLSTATE[HY093]: Invalid parameter number: mixed named and positional parameters
Если убираю лимит все работает и если убираю IN оставляю лимит тоже работает, а в совокупности никак.
Где ошибка? помогите!
Мелкий
Отправлено: 07 Февраля, 2014 - 16:03:58
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Вот же, сказано:
3d_killer пишет:
mixed named and positional parameters
Не знает, что куда ему ставить надо.
----- PostgreSQL DBA
IllusionMH
Отправлено: 07 Февраля, 2014 - 16:06:35
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
3d_killer, текст как бы намекает что нельзя смешивать именованные и неименованные параметры. Приведите все к одному виду.
Тот же IN можно без проблем склеить из массива и вставить как 1 именованный параметр.
Мелкий
Отправлено: 07 Февраля, 2014 - 16:08:01
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
IllusionMH пишет:
Тот же IN можно без проблем склеить из массива и вставить как 1 именованный параметр.
Научите, пожалуйста.
----- PostgreSQL DBA
teddy
Отправлено: 07 Февраля, 2014 - 16:11:52
Участник
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
IllusionMH пишет:
Тот же IN можно без проблем склеить из массива и вставить как 1 именованный параметр
Если я верно понял то имелось ввиду что то типа :params - закинуть в него массив и передать в IN? Если да то в PDO это проблема. Так не работает, обязательно делать через плейсхолдеры либо использовать специальную sql функцию(первый вариант приоритетнее т.к в случае с функциями мы лишаемся использования индексов)
3d_killer
Попробуйте не биндить лимит а просто приклеить его к запросу, типа
$test=$DBH->prepare("SELECT id FROM table_product WHERE category_id IN (".$placeHolders.") LIMIT ".$limit);
должно прокатить
IllusionMH
Отправлено: 07 Февраля, 2014 - 16:13:31
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Мелкий, для тех же категорий которые до этого были выдернуты из базы, можно сделать
в запрос IN(:in_param)
в массиве меток ':in_param' => implode(', ', $category)
Если IN "левые" данные, тогда в цикле пройтись и почистить.
Или забить на именованные параметры и везде ставить вопросики, и в конечный массив дописывать остальные параметры в нужном порядке. (Добавление) teddy, дык может сразу prepare выкинуть?
Покинул форум
Сообщений всего: 1462
Дата рег-ции: Апр. 2013
Помог: 91 раз(а)
IllusionMH
не нужно выкидывать)) можно же вопросики генерировать на основе количества параметров как это сделано у ТС... тогда все работает, единственная проблема в этом случае это то что именованные параметры в случае с IN не работают а так все норм
IllusionMH
Отправлено: 07 Февраля, 2014 - 16:19:45
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
teddy, неужели?
IllusionMH пишет:
Приведите все к одному виду.
IllusionMH пишет:
Или забить на именованные параметры и везде ставить вопросики, и в конечный массив дописывать остальные параметры в нужном порядке.
3d_killer
Отправлено: 07 Февраля, 2014 - 16:32:57
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
почему тогда если я оставляю IN делаю WHERE и какое нибудь условие с переменной через Bind Именованной! и работает?
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
IllusionMH пишет:
в массиве меток ':in_param' => implode(', ', $category)
Хм, надо будет ещё поиграться.
У меня давно на тестах так и уходило where id in ('1,2,3') (что эквивалентно where id='1,2,3'), вместо желаемого where id in (1,2,3)
----- PostgreSQL DBA
IllusionMH
Отправлено: 07 Февраля, 2014 - 18:19:57
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
Мелкий, точно. Нужно проверить. как же я тогда заставил подобное работать.
3d_killer
Отправлено: 07 Февраля, 2014 - 18:22:44
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
что то как ни кручу никак не выходит только появляется еще одна ошибка: Invalid parameter number: number of bound variables does not match number of tokens in
IllusionMH
Отправлено: 07 Февраля, 2014 - 18:27:51
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
3d_killer, пробовали лимит задать через ? а потом добавить его в конец массива $category?
3d_killer
Отправлено: 07 Февраля, 2014 - 18:44:49
Участник
Покинул форум
Сообщений всего: 1916
Дата рег-ции: Апр. 2011 Откуда: Ростов-на-Дону
Помог: 21 раз(а)
щас так попробую, но так конечно будет не очень удобно так как запрос будет больше намного (фильтр вобщем) (Добавление)
а и кстати так вроде бы не получится его же кинет в условие IN
IllusionMH
Отправлено: 07 Февраля, 2014 - 19:02:05
Активный участник
Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011 Откуда: .kh.ua
Помог: 242 раз(а)
3d_killer, с какого перепугу?
Вы должны создавать правильное кол-во вопросов для категорий.
когда добавите еще 1 элемент к массиву, то он будет использован для следующего ? в запросе
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.