Penso che sia abbastanza buono; Mi piace. Presumo secure()
protegge dall'iniezione di sql. Non vedo davvero nulla che cambierei.
Potresti togli le parentesi dal ciclo for sin dalla sua unica affermazione, ma non è un grosso problema
foreach ($qWhere as $key=>$value)
$fields[] = sprintf("%s = '%s'", $key, secure($value));