Как запретить одновременное выполнение определенного участка кода при нескольких одновременных подключениях?
==============================================================================================================

 Я не знаю как правильно спросить у гугла, но уверен, что ответы уже есть.  

В общем, суть следующая. Есть скрипт php (определенный участок), этот скрипт работает с базой данных. Данный скрипт добавляет данные в таблицы, если этих данных не существует. Само собой настроены связи у таблиц, в том числе и множественные.  

Дело в том, что иногда добавляются дубликаты этих данных при одновременном подключении и добавлении одинаковых данных. Первое подключение видимо проверяет, что данные не существуют и принимает решение добавить в то время, когда второй начал эти данные проверять ну и тоже принимает соответствующее решение.  

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

Добавляются абсолютно все данные. Первое подключение пока проверяет и добавляет все данные, второе подключение делает то же самое, так как первое ещё не сделало свой commit и результаты всей работы не отражены.  

  

Как правильно поступить в моем случае? Я пытаюсь что-то узнать у гугла, но толком ничего не нашел, кроме SyncMutex.  

Если честно, даже не знаю то ли это и как оно работает вообще.  

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

Тип таблиц innodb, если что.  

Подключение к базе ведется посредством PDO. 

 Это частая ошибка новичков, которые путают транзакции с блокировками.   

Тебе нужно последнее  

  

вот так и формулируй - как заблокировать таблицу на чтение  

а не какой-то абстрактный "участок кода" 

 По-моему самое простое и правильное решение здесь - insert ignore, другой вариант транзакции с блокированием таблицы, но это может сильно ударить по производительности. 

 Классика. Делай проверку на SQL.