dbtable2class.php
7 june 2012
<?
mysql_connect('localhost', 'root', 'root') or die(mysql_error());
mysql_select_db('davidvandertuijn') or die(mysql_error());
define("SHORT_OPEN_TAG", TRUE);
define("ACCOLADE_NEW_LINE", TRUE);
function from_camel_case($str)
{
$str[0] = strtolower($str[0]);
$func = create_function('$c', 'return "_" . strtolower($c[1]);');
return preg_replace_callback('/([A-Z])/', $func, $str);
}
function to_camel_case($str, $capitalise_first_char = false)
{
if ($capitalise_first_char)
{
$str[0] = strtoupper($str[0]);
}
$func = create_function('$c', 'return strtoupper($c[1]);');
return preg_replace_callback('/_([a-z])/', $func, $str);
}
if ($_POST)
{
$filename = $_POST['table'].'.class.php';
$output = NULL;
$output .= (SHORT_OPEN_TAG == TRUE ? '<?' : '<?php');
$output .= PHP_EOL;
$class_name = ucfirst($_POST['table']);
for ($i=0; $i<strlen($class_name); $i++)
{
if ($class_name[$i] == '_')
{
$class_name[$i+1] = ucfirst($class_name[$i+1]);
}
}
$output .= 'class '.$class_name.' {'.PHP_EOL;
$query = mysql_query('SHOW COLUMNS FROM '.mysql_real_escape_string($_POST['table'])) or die(mysql_error());
$aColumns = array();
while ($row = mysql_fetch_assoc($query))
{
$aColumns[] = $row;
}
$output .= PHP_EOL;
foreach ($aColumns as $aColumn)
{
$output .= "\t".'private $_'.$aColumn['Field'].';'.PHP_EOL;
}
$output .= PHP_EOL;
foreach ($aColumns as $aColumn)
{
$output .= "\t".'public function get'.to_camel_case($aColumn['Field'], TRUE).'()';
if (ACCOLADE_NEW_LINE == TRUE)
{
$output .= PHP_EOL."\t";
}
$output .= '{'.PHP_EOL;
$output .= "\t\t".'return $this->_'.$aColumn['Field'].';'.PHP_EOL;
$output .= "\t".'}'.PHP_EOL;
$output .= PHP_EOL;
$output .= "\t".'public function set'.to_camel_case($aColumn['Field'], TRUE).'($'.$aColumn['Field'].')';
if (ACCOLADE_NEW_LINE == TRUE)
{
$output .= PHP_EOL."\t";
}
$output .= '{'.PHP_EOL;
$output .= "\t\t".'$this->_'.$aColumn['Field'].' = $'.$aColumn['Field'].';'.PHP_EOL;
$output .= "\t".'}'.PHP_EOL;
$output .= PHP_EOL;
}
$output .= '}'.PHP_EOL;
$output .= '?>';
}
?>
<html>
<head>
<style>
body {
font-family: "Lucida Grande", "Lucida Sans Unicode";
font-size: 12px;
color: #3366CC;
}
textarea#output {
font-family: "Courier New";
font-size: 12px;
color: #000000;
}
</style>
</head>
<body>
<form method="POST">
<div><label for="table">Table:</label></div>
<select name="table" id="table">
<?
$query = mysql_query("SHOW TABLES");
while ($row = mysql_fetch_array($query))
{
echo '<option value="'.$row[0].'">'.$row[0].'</option>';
}
?>
</select>
<input type="submit" />
<? if ($filename) { ?>
<br /><br />
<div><label for="output"><?php echo $filename; ?></label></div>
<textarea cols="200" rows="50" id="output"><?= $output; ?></textarea>
<? } ?>
</form>
</body>
</html>