Ponieważ MySQL wykonał Twoje zapytanie bez błędów. Tylko dlatego, że napisałeś złe zapytanie, nie może to oznaczać, że zapytanie jest tak błędne, że MySQL go nie zaakceptuje.
Za każdym razem, gdy programowo generujesz zapytania SQL, zweryfikuj (poprzez debugowanie lub nawet lepsze testy jednostkowe), czy zapytanie zostało utworzone zgodnie z tym, co chcesz zrobić.
Jeśli chcesz otrzymywać wyjątek za każdym razem, gdy wystąpi błąd, włącz to:
$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);