Acho que parece muito bom; Eu gosto disso. Eu assumo
secure()
protege contra injeção de sql. Eu realmente não vejo nada que eu mudaria. Você poderia tire chaves do loop for desde sua única instrução, mas isso não é nada demais
foreach ($qWhere as $key=>$value)
$fields[] = sprintf("%s = '%s'", $key, secure($value));