Hm, execute() raczej zawsze zwraca true, jeśli zapytanie się powiedzie – czyli jeśli nie będzie błędu po stronie bazy lub w samym zapytaniu. Zapytanie, które się wykona, ale które nic nie zwróci, wciąż da true.
Chyba takim najbardziej łopatologicznym sposobem byłoby pobrać wszystkie wyniki do zmiennej przy pomocy metody fetchAll() i następnie sprawdzić, ile elementów ma tak uzyskana tablica.