Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment vérifier si les noms de table sont valides dans Propel ?

Vous pouvez analyser votre schema.xml avec le simplexml de PHP.

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

N'oubliez pas de filtrer l'entrée des utilisateurs pour $tableName , sinon il est possible d'injecter sa propre requête dans xpath. Pour avoir de meilleures performances, vous devez mettre vos résultats en cache.

Encore mieux serait si vous créez une carte de hachage avec toutes les tables basées sur votre schema.xml , mettez cette carte de hachage en cache et vérifiez-la à chaque fois.

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

Dans ce cas, il n'est pas vraiment nécessaire de filtrer l'entrée de l'utilisateur.