Я никогда не использовал кохану, поэтому извиняюсь, если этот комментарий совершенно не имеет значения, но у меня есть несколько комментариев о том, что вы пытаетесь сделать:
Когда я использую именованный параметр для имени таблицы, происходит сбой.
Я предполагаю, что это потому, что он основан на механизме параметров базовой базы данных, и я не знаю ни одной базы данных, которая позволяла бы указывать имя таблицы как параметр в запросе. Так что да, скорее всего вам придется самим строить строку.
как я могу избежать потенциально плохих символов при построении строк такого типа?
Этот вопрос кажется странным ... либо у вас есть потенциально плохие символы в некоторых именах таблиц ... если так, то почему? Или же вы получаете имя таблицы из ненадежного источника (пользователя?). Это звучит как плохая идея для меня. Что если они попытаются прочитать из таблицы, к которой у них не должно было быть доступа? Не лучше ли иметь четко определенный список допустимых имен таблиц и проверить, что таблица существует в этом списке, вместо того, чтобы избегать потенциально неправильных имен таблиц?
И у меня есть одно последнее замечание: если вы можете изменить имя таблицы в запросе, и оно все еще работает, это, возможно, признак того, что ваша база данных не нормализована правильно. Возможно, вы могли бы объединить свои таблицы и добавить дополнительный столбец с информацией о группировке и использовать предложение WHERE для выбора нужных данных? Мне нужно знать больше о вашей модели, чтобы предложить что-то более конкретное.
Я не уверен, поможет ли это вообще ответить на ваш вопрос, но это были мои мысли при чтении вашего вопроса. Я надеюсь, что вы можете использовать некоторые из них.