Cytat(mmmmmmm @ 2.03.2015, 13:41:09 )

Problemem jest tu... *.
Przy * zwracane są wszystkie kolumny ze wszystkich tabel. W MySQL w kolejności występowania we FROM. Czyli dla ciebie będzie to:
e.id, e..., ... c.id, c...., ... en.id, en...
A PDO nazywa te kolumny tak jak ma. Czyli nazywa je: id (z e), employee_id (z c), id (z c) - upss, nie mogę, bo już mam id. A potem wstawia pobrane wartości do odpowiednich kolumn. W kolejności występowania. Więc do id w efekcie wyląduje ci id z OSTATNIEJ tabeli. A jeśli jest ona dowiązana LEFT JOINem, to może się zdarzyć, że jest NULL, więc nie ma wartości.
A widzę, że nie skorzystałeś z rady i wolałeś użyć 4 zmiennej zamiast prostego IN ... Mam na myśli "(c.number = :variable1 OR e.firstname = :variable2 OR e.lastname = :variable3 OR c.card_id = :variable4)"
Nie zmieniłem bo dopiero dziś zerknąłem na ten temat.
Co do tego co napisąłeś apropo zapytania. Jak może nadpisywać wartością z innej tabelki skoro nie ma pasujących pól a co za tym idzie nie ma czym napisać bo tabelka którą chce dołaczyć nie ma odpowiednich pól (w sensie żadne nie zgadza się z polem które jest podane w łączeniu)?