sql >> Database >  >> RDS >> Mysql

SQL-query genereren op basis van URL-parameters

Er zijn een aantal manieren om dit te doen, maar de gemakkelijkste manier is om door de acceptabele kolommen te bladeren en vervolgens op de juiste manier toe te voegen.

// I generally use array and implode to do list concatenations. It avoids
// the need for a test condition and concatenation. It is debatable as to
// whether this is a faster design, but it is easier and chances are you 
// won't really need to optimize that much over a database table (a table
// with over 10 columns generally needs to be re-thought)
$search = array();
// you want to white-list here. It is safer and it is more likely to prevent
// destructive user error.
$valid  = array( 'condition', 'brand' /* and so on */ );


foreach( $valid as $column )
{
   // does the key exist?
   if( isset( $_GET[ $column ] ) )
   {
      // add it to the search array.
      $search[] = $column . ' = ' . mysql_real_escape_string( $_GET[ $column ] );
   }
}
$sql = 'SELECT * FROM TABLE_NAME WHERE ' . implode( ' AND ', $search );
// run your search.

Als je echt probeert de 'als'-statements kwijt te raken, kun je dit gebruiken:

$columns = array_intersect( $valid, array_keys( $_GET ) );
foreach( $columns as $column )
{
    $search[] = $column . ' = ' . mysql_real_escape_string( $_GET[ $column ] );
}
$sql = 'SELECT * FROM TABLE_NAME WHERE ' . implode( ' AND ', $search );

Maar misschien wilt u echte benchmarks uitvoeren om te bepalen of dat een aanzienlijk betere optie is.




  1. Hoe mysqli te laten werken met DELIMITER's in SQL-statements?

  2. De id van een rij ophalen die ik heb bijgewerkt in Sql Server

  3. TOON ALLE data tussen twee data; als er geen rij bestaat voor een bepaalde datum, toon dan nul in alle kolommen

  4. Volledige MariaDB-codering in rust en tijdens transport voor maximale gegevensbescherming - deel één