sql >> Database >  >> RDS >> Mysql

Hoe controleer ik of tabelnamen geldig zijn in Propel?

Je kunt je schema.xml ontleden met PHP's simplexml.

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

Vergeet niet de invoer van gebruikers te filteren op $tableName , anders is het mogelijk om een ​​eigen zoekopdracht in xpath te injecteren. Voor betere prestaties moet u uw resultaten in de cache plaatsen.

Nog beter zou zijn als u een hash-map maakt met alle tabellen op basis van uw schema.xml , cache deze hash-kaart en controleer deze elke keer.

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

In dit geval is het niet echt nodig om de invoer van de gebruiker te filteren.



  1. Hulp bij:ERROR 1025 (HY000):Fout bij hernoemen van .... (errno:150)

  2. mysql-duur en ophaaltijd

  3. Perl DBI versnellen fetchrow_hashref

  4. Oracle SQL Controlebeperking tussen 2 tabellen