Scripting out database objects with PHP
I’ve recently needed to script out the create sql for various MySQL database objects. No Powershell or SMO to help with this so I’ve quickly rolled a PHP script to get this done.
This will script out all tables, views, triggers, stored procedures and functions from the specified database. One file per object in your /tmp directory (you’ll need to change this if you’re running on Windows). Just change the $source_host, $source_db, $source_user and $source_pwd variables to point at the database you want to script out.
<?php // set source and connection variables
$source_host = "localhost";
$source_db = "xxxx";
$source_user = "xxxx";
$source_pwd = "xxxx";
///////////////////////////////////////////////
// A few helper functions
///////////////////////////////////////////////
function getMySQLConnection($host, $database, $user, $pwd)
{
$conn = mysql_connect($host, $user, $pwd) or die(mysql_error());
mysql_select_db($database, $conn) or die(mysql_error());
return $conn;
}
// returns a list of tables
function getTables($connection, $database)
{
$tables = array();
$result = mysql_query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'BASE TABLE' AND TABLE_SCHEMA = '".$database."'", $connection) or die(mysql_errno());
while($row = mysql_fetch_row($result))
{
array_push($tables, $row[0]);
}
return $tables;
}
// returns a list of views
function getViews($connection, $database)
{
$views = array();
$result = mysql_query("SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE = 'VIEW' AND TABLE_SCHEMA = '".$database."'", $connection) or die(mysql_errno());
while($row = mysql_fetch_row($result))
{
array_push($views, $row[0]);
}
return $views;
}
// returns a list of procs & functions
function getRoutines($connection, $database)
{
$routines = array();
$result = mysql_query("SELECT ROUTINE_NAME FROM INFORMATION_SCHEMA.ROUTINES WHERE TABLE_SCHEMA = '".$database."'", $connection) or die(mysql_errno());
while($row = mysql_fetch_row($result))
{
array_push($routines, $row[0]);
}
return $routines;
}
// returns a list of triggers
function getTriggers($connection, $database)
{
$triggers = array();
$result = mysql_query("SELECT TRIGGER_NAME FROM INFORMATION_SCHEMA.TRIGGERS WHERE TABLE_SCHEMA = '".$database."'", $connection) or die(mysql_errno());
while($row = mysql_fetch_row($triggers))
{
array_push($triggers, $row[0]);
}
return $triggers;
}
// writes text files
function writeTextFile($contents, $filename)
{
$writer = fopen($filename, 'w') or die("Unable to open file");
fwrite($writer, $contents);
fclose($writer);
}
// Gets the sql used to create table
function getTableCreate($connection, $table)
{
$sql = "SHOW CREATE TABLE `".$table."`";
$result = mysql_query($sql, $connection) or die(mysql_error());
$row = mysql_fetch_row($result);
return $row[1];
}
// returns the sql used to create a routine
function getRoutineCreate($connection, $routine)
{
$sql = "SHOW CREATE PROCEDURE `".$routine."`";
$result = mysql_query($sql, $connection) or die(mysql_error());
$row = mysql_fetch_row($result);
return $row[1];
}
// returns the sql used to create a trigger
function getTriggerCreate($connection, $trigger)
{
$sql = "SHOW CREATE TRIGGER `".$trigger."`";
$result = mysql_query($sql, $connection) or die(mysql_error());
$row = mysql_fetch_row($result);
return $row[1];
}
/////////////////////////////////////////////////////////
// EOF FUNCTIONS
/////////////////////////////////////////////////////////
$source_connection = getMySQLConnection($source_host, $source_db, $source_user, $source_pwd);
$tables = getTables($source_connection, $source_db);
// Get the create sql for each table
// writing each one to a text file
foreach ($tables as $table)
{
$create_sql = getTableCreate($source_connection, $table);
$filename = "/tmp/".$table.".sql";
writeTextFile($create_sql, $filename);
echo "Generated create table sql for ".$table."\n";
}
$views = getViews($source_connection, $source_db);
// Create the sql for each view
foreach($views as $view)
{
$create_sql = getTableCreate($source_connection, $view);
$filename = "/tmp/".$view.".sql";
writeTextFile($create_sql, $filename);
echo "Generated create view sql for ".$view."\n";
}
$routines = getRoutines($source_connection, $source_db);
// get the create sql for each routine
foreach($routines as $routine)
{
$create_sql = getRoutineCreate($source_connection, $routine);
$filename = "/tmp/".$routine.".sql";
writeTextFile($create_sql, $filename);
echo "Generated create routine sql for ".$routine."\n";
}
$triggers = getTriggers($source_connection, $source_db);
// get the create sql for each trigger
foreach($triggers as $trigger)
{
$create_sql = getTriggerCreate($source_connection, $trigger);
$filename = "/tmp/trg_".$trigger.".sql";
writeTextFile($create_sql, $filename);
echo "Generated create trigger sql for ".$trigger."\n";
}
?>