sql >> Base de Datos >  >> RDS >> Mysql

¿Cómo verifico si los nombres de las tablas son válidos en Propel?

Puede analizar su schema.xml con simplexml de PHP.

$xml = simplexml_load_file('schema.xml');
$tableExists = 0 < count($xml->xpath("table[@phpName='$tableName']"));

No olvide filtrar la entrada de los usuarios para $tableName , de lo contrario, es posible inyectar su propia consulta en xpath. Para tener un mejor rendimiento, debe almacenar en caché sus resultados.

Aún mejor sería si crea un mapa hash con todas las tablas basadas en su schema.xml , almacene en caché este mapa hash y compruébelo cada vez.

$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]);

En este caso, no es realmente necesario filtrar la entrada del usuario.