Expondo o nome da tabela e os nomes dos campos no URL da solicitação

Fui encarregado de criar esse componente do Joomla (sim, joomla; mas não relacionado) e um professor me disse que eu deveria tornar meu código o mais dinâmico possível (um código que requer menos manutenção) e evitar a codificação. A abordagem que pensamos inicialmente é pegar parâmetros de URL, transformá-los em objetos e passá-los para consulta.

Digamos que queremos ler hotel com o ID nº 1 na tabela "hotéis". digamos que a tabela tenha os campos "hotel_id", "hotel_name" e alguns outros campos.

gora, a abordagem adotada para criar a string de consulta sql é analisar a solicitação de URL que se parecia com iss

index.php?task=view&table=hotels&hotel_id=1&param1=something&param2=somethingelse

e transformou-o em um objeto PHP como este (mostrado em equivalente JSON, mais fácil de entender):

obj = {
  'table':'hotel',
  'conditions':{
        'hotel_id':'1',
        'param1':'something',
        'param2':'somethingelse'
}

e a consulta SQL será algo assim, onde as condições são repetidas e anexadas à string em que o campo e o valor da cláusula WHERE são a chave e o valor do objeto (ainda no formato JSON para facilitar):

SELECT * FROM obj.table WHERE hotel_id=1 AND param1=something and so on...

O problema que me incomodou foi a exposição do nome da tabela e do campo no URL da solicitação. Eu sei que isso representa um risco de segurança, expondo itens que só devem ser vistos no lado do servidor. A solução atual que estou pensando é fornecer aliases para cada tabela e campo para o lado do cliente - mas isso seria uma codificação embutida, o que é contrário à sua política. além do mais, se eu fizesse isso e tivesse mil tabelas para o alias, não seria prátic

Qual é o método adequado para fazer isso sem:

hard coding stuff mantenha o código como dinâmico e adaptável

EDITAR

Em relação às consultas arbitrárias (esqueci de incluir isso), o que atualmente as interrompe no back-end é uma função, que obtém uma referência de um objeto codificado (mais como um arquivo de configuração mostrado aqui) e analisa o URL por escolhendo parâmetros ou combinando-os.

A configuração é semelhante a:

// 'hotels' here is the table name. instead of parsing the url for a table name
// php will just find the table from this config. if no match, return error.
// reduces risk of arbitrary tables.

'hotels' => array(      

  // fields and their types, used to identify what filter to use

  'structure' => array(  
    'hotel_id'=>'int',
    'name'=>'string',
    'description'=>'string',
    'featured'=>'boolean',
    'published'=>'boolean'
  ),

   //these are the list of 'tasks' and accepted parameters, based on the ones above
   //these are the actual parameter names which i said were the same as field names
   //the ones in 'values' are usually values for inserting and updating
   //the ones in 'conditions' are the ones used in the WHERE part of the query

  'operations' =>array(  
    'add' => array(
      'values' => array('name','description','featured'),
      'conditions' => array()
    ),
    'view' => array(
    'values' => array(),
    'conditions' => array('hotel_id')
    ),
    'edit' => array(
    'values' => array('name','description','featured'),
    'conditions' => array('hotel_id')
    ),
    'remove' => array(
    'values' => array(),
    'conditions' => array('hotel_id')
    )
  )
)

e assim, a partir dessa lista de configurações:

se um parâmetro enviado para uma tarefa não estiver completo, o servidor retornará um err se um parâmetro do URL for duplicado, apenas o primeiro parâmetro lido será obtid qualquer outro parâmetro que não esteja na configuração é descartadose essa tarefa não for permitida, ela não será listada para essa tabelase não houver uma tarefa, o servidor retornará um errose não houver uma tabela, o servidor retornará um erro

Na verdade, modelei isso depois de ver um componente no joomla que usa essa estratégia. Reduz o modelo e o controlador para 4 funções dinâmicas que seriam CRUD, deixando apenas o arquivo de configuração como o único arquivo editável posteriormente (foi o que eu quis dizer sobre código dinâmico, só adiciono tabelas e tarefas se forem necessárias tabelas adicionais) mas receio que possa impor um risco de segurança que talvez ainda não conheça.

lguma idéia para uma alternativ

questionAnswers(3)

yourAnswerToTheQuestion