Это умная идея. Единственная проблема, которую я вижу, состоит в том, как отличить SQL от переданных переменных. Если вы не сделаете предположение, что каждый второй аргумент является переменной. Я просто думаю, что это предположение хрупко, и запутывает вещи больше, чем дает понять.
Лучше всего будет использовать интерполяцию:
query("SELECT foo FROM bar WHERE id = #{id}", array("id" => "23"));
Затем напишите логику для их интерполяции.