ortsuev33, IN - это условие, проверяющее вхождение значения в массив.
А английский учите. Без него в компьютерных отраслях работать практически невозможно. Хотя бы со словарём, но понимать надо.
ortsuev33, У вас один параметр подставляется в запросе? Значит в execute должен быть массив строго с одним элементом.
Вам же английским по белому пишет:
Invalid parameter number: number of bound variables does not match number of tokens
ortsuev33, Тогда будете каждый раз перезаписывать $res.
Циклы при обращении к базе данных - зло. Перепишите запрос с использованием IN и получайте все нужные данные одним запросом.
$arrayId = array_filter($arrayId, function($a) { return is_numeric($a); });
$sql='SELECT * FROM city WHERE id IN (' . implode(',', $arrayId) . ')';
JaxxDexx, Во-первых ему никто не мешает дать свой ответ. Во-вторых, независимо от приоритета постинкремент применяется к конкретной переменной, а не к выражению.
Kerm, FOR UPDATE дописывать не надо, вы не меняете таблицу `sh_prod_im_`.
`updated` в основной части INSERT'а можно не указывать, вы задали для этого поля 1 по умолчанию, новые строки будут создаваться с 1.
Kerm, Обычно нет смысла оформлять такой код в хранимой процедуре, его можно использовать прямо в скрипте, вместо создания таблицы `sh_prod_im_`.
Действительно ли первичным ключом должна быть комбинация (`prod`,`type`,`pict`)?
И используйте транзакцию, тогда для остальных процессов обновление таблицы будет выглядеть как мнгновенный процесс.
Андрей Иванов, Нет. К тому же, если посмотреть стандарт HTML, то тэг option может содержать только текстовую ноду. Другие элементы внутри option по стандарту недопустимы.