Tach!
if (!empty($sql)) {
Nesting reduzieren! Logik umdrehen und return.
if (empty($params)) {
Extrawurst reduzieren! Probier mal, ob execute() ein leeres Array oder alternativ null schluckt (Voraussetzung, keine Platzhalter im SQL-Statement). Dann lass query() weg und nimm nur execute().
dedlfix.