Podrías usar una tabla temporal. Haga que la aplicación php inserte todo en la tabla temporal y luego llame a una consulta con este tipo de lógica.
insert into mainTable
(field1, field2, etc)
select field1, field2, etc
from tempTable
where (subquery to check for existing records goes here)
O podrías usar probar/atrapar. No conozco la sintaxis de php, pero dado que muchos otros lenguajes pueden hacer este tipo de cosas, espero que php también pueda hacerlo.
try
code to insert record
catch
if the error code is the one for duplicate records, do nothing.
if it's something else, handle it accordingly.