Mysql
 sql >> Base de Dados >  >> RDS >> Mysql

Como verifico se os nomes das tabelas são válidos no Propel?


Você pode analisar seu schema.xml com o simplexml do PHP.
$xml = simplexml_load_file('schema.xml');
$tableExists = 0 < count($xml->xpath("table[@phpName='$tableName']"));

Não se esqueça de filtrar a entrada dos usuários para $tableName , caso contrário é possível injetar a própria consulta no xpath. Para ter um melhor desempenho, você deve armazenar em cache seus resultados.

Ainda melhor seria se você criasse um mapa de hash com todas as tabelas com base em seu schema.xml , armazene em cache este mapa de hash e verifique isso todas as vezes.
$hashMap = $foo->getCache('tables');

if (!$hashMap) {
    $xml = simplexml_load_file('schema.xml');
    $tables = $xml->xpath("table");
    foreach ($tables as $table) {
        $hashMap[$table['phpName']] = true;
    }
    $foo->setCache('tables', $hashMap);
}

$tableExists = isset($hashMap[$tableName]);

Neste caso, não é realmente necessário filtrar a entrada do usuário.