Brainiac,
тебе нужно открыть транзакцию перед запросом с select ... for update
и закрывать когда уже выполнишь все действия, для которых необходима блокировка.
А сейчас этот запрос блокирует данные только в момент своей работы и не более.
транзакции через PDO не проходят,попробовать написать через mysql?)
обе части этой фразы, кхм, ерунда.
Хотя, с учётом того что у тебя нет индексов, всё равно лочится вся таблица.
Если тебе нужна блокирока выполнения скрипта, чтоб одновременно только одна копия была запущена, то и
flock сгодится