electroZ microsystems

MySQL DB changes


Un script de 30 lignes de PHP qui permet d'avoir une vue d'ensemble des modifications dans une base de donnée MySQL complète. Le principe est l'utilisation d'une colonne timestamp de type timestamp (auto update) dans chaque table. Le script affiche toutes les entrée dont le timestamp et plus petit que un jour. On peux lancer ce script tous les jours pour avoir une trace des changements dans une base de donnée.

<? //Configuration
   if ($_SERVER['argc'] != 4) 
      die("Wrong number of arguments, expected:  DBNAME DBUSER DBPASS");
   
   $database=$_SERVER['argv'][1];
   $user    =$_SERVER['argv'][2];
   $password=$_SERVER['argv'][3];

   //Connection
   mysql_connect("localhost",$user,$password);
   @mysql_select_db($database) or die( "Unable to select database");

   //Get Table liste
   $result = mysql_list_tables($database);
   $num_rows = mysql_num_rows($result);
   for ($i = 0; $i < $num_rows; $i++) 
      $Table[$i]=mysql_tablename($result, $i);

   //Get new lines by checking timestamp
   foreach($Table as $T){
      $sql = "SELECT * from $T where to_days(now()) - to_days(timestamp)=0";
      $result = mysql_query($sql);

      if (mysql_num_rows($result)){
         $line = "[==========TABLE $T==========]\n";
         while ($row = mysql_fetch_assoc($result)){
            foreach ($row as $column => $data)
               $line.="  $column>[".utf8_encode($data)."]";
            $line.="\n\n";
         }
         echo "$line\n";
      }
   }
   mysql_close();
?>

This script can be called from a unix shell like that

#!/bin/bash
DBNAME="dbname"
DBUSER="user"
DBPASS="pass"
php ./checkTodayDBChanges.php $DBNAME $DBUSER $DBPASS