PHP/MySQL: Hvordan legge prefiks på tabeller uten prefiks

Siden det har vært veldig lite skriving på denne bloggen, tenkte jeg at jeg skulle bruke romjulen til å skrive noe. Jeg sitter her nå på vakt i militæret og har lite å gjøre. Det ble stilt et spørsmål på NWF hvordan en kunne sette prefiks på tabeller som mangler prefiks i en viss database. Dette er, såvidt jeg vet, ikke mulig å løse kun med å bruke spørringer i MySQL. Derfor måtte jeg til med 2 slags spørringer, og litt prossessering i PHP.

Vi benytter oss av spørringen

  1. SHOW TABLES

For å hente ut alle tabellene som er i databasen. Disse er det vi bruker for å sjekke om det er noen som ikke har prefiksen vi skal ha. Etter vi har funnet alle tabellene vi må rename bruker vi RENAME TABLE som kan endre navn på flere tabeller samtidig.

  1. RENAME TABLE
  2. table1 TO new_table1,
  3. table2 TO new_table2
  4. -- ...osv i den retningen

Da skal det være veldig enkelt å hente ut nødvendig informasjon, bruke PHPs strpos() eller preg_match() (fordelen med preg_match() er at du kan vise til hvor i strengen du skal matche, som i vårt tilfelle er på starten) til å finne hvilke som ikke har ønsket prefiks.

Resultatet er som følger:

  1. <?php
  2.  
  3. // Connect to the database and select
  4. mysql_connect ('localhost', '***', '***');
  5.  
  6. /**
  7. * A function that returns a rename-query with
  8. * all the tables that lack the prefix you
  9. * set in the argument.
  10. *
  11. * @param string $prefix
  12. * @return mixed
  13. */
  14. function make_rename_command ($prefix) {
  15.  
  16.    
  17.     $mysql_result = mysql_query ('SHOW TABLES');
  18.     $tables = array();
  19.    
  20.     // Fetch all the tables in the databse
  21.     while ($row = mysql_fetch_array ($mysql_result)) {
  22.         $tables[] = $row[0];
  23.     }
  24.    
  25.     // Start the MySQL-query
  26.     $output = 'RENAME TABLE ';
  27.     $all = true;
  28.    
  29.     foreach($tables as $table) {
  30.        
  31.         // Check if the table has the prefix
  32.         if(!preg_match ('/^'.$prefix.'/', $table)) {
  33.             // It doesn't so lets add it to the new
  34.             // query...
  35.             $output .= '`'.$table . '` TO `' .
  36.              $prefix . $table . '`, ';
  37.            
  38.             // Not all the tables has the prefix
  39.             $all = false;
  40.         }
  41.     }
  42.    
  43.     // If all the tables has the correct prefix,
  44.     // skip returning a query
  45.     if($all) {
  46.         return false;
  47.     }
  48.    
  49.     // Return the query
  50.     return substr ($output, 0, -2);
  51. }
  52.  
  53.  
  54. // Check if there is something to rename
  55. if($rename_query = make_rename_command ('new_')) {
  56.     $query = mysql_query ($rename_query);
  57.    
  58.     // Check for a successfull query
  59.     if(!$query) {
  60.         die ('MySQL-query failed: ' . $rename_query);
  61.     }
  62.    
  63.     // Everyting went well.
  64.     echo 'ALl the tables where renamed.';
  65.    
  66. } else {
  67.     // There was nothing to do...
  68.     echo 'There\'s nothing to rename';
  69. }
  70.  
  71. ?>

Kodene skal være godt kommenterte, og trenger derfor ingen forklaring. Det er jo mulig du en gang i fremtiden får bruk for dette, og ikke orker å gjøre det selv?

Legg igjen respons

Fyll ut alle felt markert med *

Brukerinformasjon
  1. Kan bruke følgende html: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong> og [html] [css], [mysql] og [php] Hold posten ren og fin!

    Siter valgt tekst

E-post-varsel uten å skrive kommentar.

Info om posten

Innlegget ble postet 28.12.07 05:25 og ligger under kategorien PHP / MySQL. Du kan abonnere på kommentarene ved å bruke RSS 2.0 feed. Du kan legge til kommenter, eller trackback fra din blogg/side.

Resurser

Arkiver

Metainfo


Siste Flickr-bilder

  • Commentsystem (20070308)
  • Ukraina Aksjonen 2006 (20070306)
  • Mikael Brevik blogg (20070306)
  • Mikael Brevik (20070306)
  • Brukerdefinert side - AVIS2 (20070306)
  • Brevik Webutvikling (20070306)
  • skyscraper
  • visittkort