Revision: 11985
Updated Code
at February 26, 2009 16:04 by jonniespratley
Updated Code
<?php /** * I hold mysql methods * * @name MySQLService * @author Jonnie Spratley * @version 1.0 * @license http://opensource.org/licenses/gpl-license.php GNU Public License * */ class MySQLConnect { public $mysqli; /** * I hold methods to alter a mysql database * * @param [string] $host * @param [string] $username * @param [string] $password */ public function __construct( $host, $username, $password ) { $link = new mysqli ( $host, $username, $password ); /* check connection */ if ( mysqli_connect_errno () ) { trigger_error ( 'Database connection failure: Username/Password was incorrect.', E_USER_ERROR ); exit (); } else { $this->setMysqli ( $link ); } } /** * I execute a query * * @param [string] $sql * @return [array] */ public function execute( $sql ) { return $this->queryToARRAY ( $sql ); } /** * I get the databases * * @return [array] */ public function getDatabases() { return $this->queryToARRAY ( "SHOW DATABASES" ); } /** * I execute a raw query * * @param [string] $query * @return [link] */ public function realQuery( $query ) { return $this->mysqli->query ( $query ); } /** * I start the tree * * @return [array] */ public function tree_getTree() { $mysqlVersion = mysqli_get_client_info ( $this->mysqli ); $host = $_SERVER [ 'HTTP_HOST' ] . " (MySQL v. $mysqlVersion )"; $hostArray = array ( 'label' => $host, 'type' => 'server', 'children' => $this->tree_getSchemas () ); $treeArray [] = array ( 'label' => 'SQL Databases', 'type' => 'servers', 'children' => $hostArray ); return json_encode ( $treeArray ); } /** * I build the tree * * @return [array] */ private function tree_getSchemas() { //Database query $databaseSQL = $this->realQuery ( "SHOW DATABASES" ); //New database array $databases = array (); //Loop the query while ( $database = mysqli_fetch_assoc ( $databaseSQL ) ) { //Create a new array of tables for each database $tables = array (); $status = array (); $size = array (); foreach ( $database as $key => $value ) { //Set the table array to get the tbles from the database $tables = $this->tree_db_getTables ( $value ); $status = $this->_db_getStatus ( $value ); $size = $this->_db_getSize ( $value ); } //Add the tables to the database array $databases [] = array ( "aDatabase" => $value, "aData" => $key, "aType" => "database", "aIcon" => "database", "aStatus" => $status, "aSize" => $size, "aTables" => $tables ); } $databaseFolder [] = array ( 'label' => 'Schemas', 'children' => $databases ); return $databaseFolder; } /** * I get the users auth * * @return [array] */ private function tree_db_getAuthorizations() { $authorizationsArray = array ( 'label' => 'Authorization IDs', 'children' => array ( 'label' => 'rfd' ) ); return $authorizationsArray; } //TODO: private function tree_db_getDependcenies( $database ) { $dependceniesArray = array ( 'label' => 'Dependcencies', 'children' => array ( 'label' => 'test' ) ); return $dependceniesArray; } //TODO: private function tree_db_getStoredProcs( $database ) { $storedProcsArray = array ( 'label' => 'Stored Procedures', 'children' => array ( 'label' => 'test' ) ); return $storedProcsArray; } /** * I get the tables * * @param [string] $database the database * @return [array] */ private function tree_db_getTables( $database ) { //table query $tableSQL = $this->realQuery ( "SHOW TABLES FROM $database" ); //create a new array of tables $tables = array (); //loop all the results while ( $table = mysqli_fetch_assoc ( $tableSQL ) ) { $columns = array (); $statuss = array (); $indexes = array (); $constraints = array (); $dependicies = array (); $triggers = array (); //for each table in the result make an array foreach ( $table as $t_key => $t_value ) { //get the tables fields for each table $columns = $this->tree_tbl_getColumns ( $database, $t_value ); //now get the primary key for each table $constraints = $this->tree_tbl_getConstraints ( $database, $t_value ); //now get the indexes for each table $indexes = $this->tree_tbl_getIndexes ( $database, $t_value ); //now get the dependencys for each table $dependicies = $this->tree_tbl_getDependcenies ( $database, $t_value ); //now get the triggers for each table $triggers = $this->tree_tbl_getTriggers ( $database, $t_value ); //now get the status for each table $statuss = $this->_tbl_getStatus ( $database, $t_value ); } $columnArr = $columns; $constraintArr = $constraints; $indexArr = $indexes; $dependencyArr = $dependicies; $triggerArr = $triggers; $statusArr = $statuss; $tables [] = array ( "label" => $t_value, "type" => "table", "icon" => "table", "children" => array ( $columnArr, $constraintArr, $indexArr, $dependencyArr, $triggerArr, $statusArr ) ); } $tableFolder [] = array ( 'label' => 'Tables', 'children' => $tables ); return $tableFolder; } //TODO: private function tree_db_getUserFunctions( $database ) { } //TODO: private function tree_db_getViews( $database ) { } /** * I get the columns * * @param [string] $database * @param [string] $table * @return [array] */ private function tree_tbl_getColumns( $database, $table ) { $sql = "SHOW FIELDS FROM $database.$table"; $query = $this->realQuery ( $sql ); $columnsArray = array (); while ( $row = mysqli_fetch_row ( $query ) ) { $type = strtoupper ( $row [ 1 ] ); $null = ''; //Check if the column can be null if ( $row [ 2 ] == 'YES' ) { $null = 'Nullable'; } $type = '[' . $type . ' ' . $null . ']'; $columnsArray [] = array ( 'label' => $row [ 0 ] . ' ' . $type ); } //Create the folder $columnsFolder = array ( 'label' => 'Columns', 'children' => $columnsArray ); return $columnsFolder; } /** * I get the primary keys * * @param [string] $database * @param [string] $table * @return [array] */ private function tree_tbl_getConstraints( $database, $table ) { $sql = "SHOW INDEX FROM $database.$table"; $result = $this->realQuery ( $sql ); $constraintArray = array (); while ( $constraint = mysqli_fetch_assoc ( $result ) ) { //check if the key is the primary key if ( $constraint [ 'Key_name' ] == 'PRIMARY' ) { $constraintArray = array ( 'label' => $constraint [ 'Key_name' ] ); } } $constraintFolder = array ( 'label' => 'Constraints', 'children' => array ( $constraintArray ) ); return $constraintFolder; } //TODO: /** * I get the dependcencies * * @param [string] $database * @param [string] $table * @return [array] */ private function tree_tbl_getDependcenies( $database, $table ) { $dependArray = array ( 'label' => 'admin table' ); $dependFolder = array ( 'label' => 'Dependencies', 'children' => array ( $dependArray ) ); return $dependFolder; } /** * I get the indexes * * @param [string] $database * @param [string] $table * @return [array] */ private function tree_tbl_getIndexes( $database, $table ) { $sql = "SHOW INDEX FROM $database.$table"; $query = mysqli_query ( $this->mysqli, $sql ); $indexArray = array (); while ( $row = mysqli_fetch_row ( $query ) ) { if ( $row [ 2 ] !== 'PRIMARY' ) { $indexArray [] = array ( 'label' => $row [ 4 ] . "($row[2])" ); } } $indexFolder = array ( 'label' => 'Indexes', 'children' => $indexArray ); return $indexFolder; } //TODO: /** * I get the triggers * * @param [string] $database * @param [string] $table * @return [array] */ private function tree_tbl_getTriggers( $database, $table ) { $triggerArray = $this->queryToARRAY ( "SHOW INDEX FROM $database.$table" ); $triggerFolder = array ( 'label' => 'Triggers', 'children' => array ( $triggerArray ) ); return $triggerFolder; } /** * I get the table status * * @param [string] $database * @param [string] $table * @return [array] */ private function _tbl_getStatus( $database, $table ) { return $this->queryToARRAY ( "SHOW TABLE STATUS FROM $database LIKE '$table'" ); } /** * I get the size of all the databases * * @param [string] $database the database * @return [array] */ private function _db_getSize( $database ) { $statusSQL = $this->realQuery ( "SHOW TABLE STATUS FROM $database" ); $sizeArray = array (); $totalSize = 0; $dataSize = 0; $indexSize = 0; //loop all the results while ( $size = mysqli_fetch_assoc ( $statusSQL ) ) { $dataSize += $size [ 'Data_length' ]; $indexSize += $size [ 'Index_length' ]; } $totalSize = $dataSize + $indexSize; $sizeArray [] = array ( 'totalSize' => $totalSize, 'dataSize' => $dataSize, 'indexSize' => $indexSize ); return $sizeArray; } /** * I get the status of the all the tables for a database. * * @param [string] $database the database * @return [array] */ private function _db_getStatus( $database ) { return $this->queryToARRAY ( "SHOW TABLE STATUS FROM $database" ); } /** * I execute a query and return the results as json. * * @param [string] $sql the query to be executed * @return [json] the result in json */ private function queryToJSON( $sql ) { $result = $this->realQuery ( $sql ); while ( $row = mysqli_fetch_assoc ( $result ) ) { $array [] = $row; } return json_encode ( $array ); } /** * I execute a query and return the result as an array. * * @param [string] $sql the query to be executed * @return [array] the result array */ public function queryToARRAY( $sql ) { $query = $this->realQuery ( $sql ); $array = array (); while ( $row = mysqli_fetch_assoc ( $query ) ) { $array [] = $row; } return $array; } /** * I get the query status * * @param [string] $sql * @return [json] mysql status with the ('_') striped out */ public function queryStatusToJSON( $sql ) { $result = $this->realQuery ( $sql ); while ( $row = mysqli_fetch_assoc ( $result ) ) { //replace some of the names $row = str_replace ( 'Com_', '', $row ); //take out the _ of the rows $row = str_replace ( '_', ' ', $row ); $array [] = $row; } sort ( $array ); return json_encode ( $array ); } /** * I dump vars * * @param [string] $title the title of the dump * @param [var] $var the var */ public function dump( $title, $var ) { print "<h4>$title</h4>"; print "<pre>"; print_r ( $var ); print "</pre>"; } /** * @return [link] */ public function getMysqli() { return $this->mysqli; } /** * @param [link] $mysqli */ public function setMysqli( $mysqli ) { $this->mysqli = $mysqli; } } ?>
Revision: 11984
Updated Code
at February 26, 2009 07:26 by jonniespratley
Updated Code
<?php class MySQLConnect { public $mysqli; public function __construct( $host, $username, $password ) { $link = new mysqli ( $host, $username, $password ); /* check connection */ if ( mysqli_connect_errno () ) { trigger_error ( 'Database connection failure: Username/Password was incorrect.', E_USER_ERROR ); exit (); } else { $this->setMysqli ( $link ); } } public function execute( $sql ) { return $this->queryToARRAY ( $sql ); } public function getDatabases() { return $this->queryToARRAY( "SHOW DATABASES" ); } public function realQuery( $query ) { return $this->mysqli->query ( $query ); } public function tree_getTree() { $mysqlVersion = mysqli_get_client_info ( $this->mysqli ); $host = $_SERVER [ 'HTTP_HOST' ] . " (MySQL v. $mysqlVersion )"; $hostArray = array ( 'label' => $host, 'type' => 'server', 'children' => $this->tree_getSchemas () ); $treeArray [] = array ( 'label' => 'SQL Databases', 'type' => 'servers', 'children' => $hostArray ); return json_encode( $treeArray ); } private function tree_getSchemas() { //Database query $databaseSQL = $this->realQuery ( "SHOW DATABASES" ); //New database array $databases = array (); //Loop the query while ( $database = mysqli_fetch_assoc ( $databaseSQL ) ) { //Create a new array of tables for each database $tables = array (); $status = array (); $size = array (); foreach ( $database as $key => $value ) { //Set the table array to get the tbles from the database $tables = $this->tree_db_getTables ( $value ); $status = $this->_db_getStatus( $value ); $size = $this->_db_getSize( $value ); } //Add the tables to the database array $databases [] = array ( "aDatabase" => $value, "aData" => $key, "aType" => "database", "aIcon" => "database", "aStatus" => $status, "aSize" => $size, "aTables" => $tables ); } $databaseFolder [] = array ( 'label' => 'Schemas', 'children' => $databases ); return $databaseFolder; } private function tree_db_getAuthorizations() { $authorizationsArray = array ( 'label' => 'Authorization IDs', 'children' => array ( 'label' => 'rfd' ) ); return $authorizationsArray; } //TODO: private function tree_db_getDependcenies( $database ) { $dependceniesArray = array ( 'label' => 'Dependcencies', 'children' => array ( 'label' => 'test' ) ); return $dependceniesArray; } //TODO: private function tree_db_getStoredProcs( $database ) { $storedProcsArray = array ( 'label' => 'Stored Procedures', 'children' => array ( 'label' => 'test' ) ); return $storedProcsArray; } private function tree_db_getTables( $database ) { //table query $tableSQL = $this->realQuery( "SHOW TABLES FROM $database" ); //create a new array of tables $tables = array (); //loop all the results while ( $table = mysqli_fetch_assoc ( $tableSQL ) ) { $columns = array (); $statuss = array (); $indexes = array (); $constraints = array(); $dependicies= array(); $triggers = array(); //for each table in the result make an array foreach ( $table as $t_key => $t_value ) { //get the tables fields for each table $columns = $this->tree_tbl_getColumns ( $database, $t_value ); //now get the primary key for each table $constraints = $this->tree_tbl_getConstraints ( $database, $t_value ); //now get the indexes for each table $indexes = $this->tree_tbl_getIndexes ( $database, $t_value ); //now get the dependencys for each table $dependicies = $this->tree_tbl_getDependcenies ( $database, $t_value ); //now get the triggers for each table $triggers = $this->tree_tbl_getTriggers ( $database, $t_value ); //now get the status for each table $statuss = $this->_tbl_getStatus( $database, $t_value ); } $columnArr = $columns; $constraintArr = $constraints; $indexArr = $indexes; $dependencyArr = $dependicies; $triggerArr = $triggers; $statusArr = $statuss; $tables [] = array ( "label" => $t_value, "type" => "table", "icon" => "table", "children" => array ( $columnArr, $constraintArr, $indexArr, $dependencyArr, $triggerArr, $statusArr ) ); } $tableFolder [] = array ( 'label' => 'Tables', 'children' => $tables ); return $tableFolder; } //TODO: private function tree_db_getUserFunctions( $database ) { } //TODO: private function tree_db_getViews( $database ) { } private function tree_tbl_getColumns( $database, $table ) { $sql = "SHOW FIELDS FROM $database.$table"; $query = $this->realQuery( $sql ); $columnsArray = array (); while ( $row = mysqli_fetch_row ( $query ) ) { $type = strtoupper ( $row [ 1 ] ); $null = ''; //Check if the column can be null if ( $row [ 2 ] == 'YES' ) { $null = 'Nullable'; } $type = '[' . $type . ' ' . $null . ']'; $columnsArray [] = array ( 'label' => $row [ 0 ] . ' ' . $type ); } //Create the folder $columnsFolder = array ( 'label' => 'Columns', 'children' => $columnsArray ); return $columnsFolder; } private function tree_tbl_getConstraints( $database, $table ) { $sql = "SHOW INDEX FROM $database.$table"; $result = $this->realQuery( $sql ); $constraintArray = array (); while ( $constraint = mysqli_fetch_assoc ( $result ) ) { //check if the key is the primary key if ( $constraint [ 'Key_name' ] == 'PRIMARY' ) { $constraintArray = array ( 'label' => $constraint [ 'Key_name' ] ); } } $constraintFolder = array ( 'label' => 'Constraints', 'children' => array ( $constraintArray ) ); return $constraintFolder; } //TODO: private function tree_tbl_getDependcenies( $database, $table ) { $dependArray = array ( 'label' => 'admin table' ); $dependFolder = array ( 'label' => 'Dependencies', 'children' => array ( $dependArray ) ); return $dependFolder; } private function tree_tbl_getIndexes( $database, $table ) { $sql = "SHOW INDEX FROM $database.$table"; $query = mysqli_query ( $this->mysqli, $sql ); $indexArray = array (); while ( $row = mysqli_fetch_row ( $query ) ) { if ( $row [ 2 ] !== 'PRIMARY' ) { $indexArray [] = array ( 'label' => $row [ 4 ] . "($row[2])" ); } } $indexFolder = array ( 'label' => 'Indexes', 'children' => $indexArray ); return $indexFolder; } //TODO: private function tree_tbl_getTriggers( $database, $table ) { $triggerArray = $this->queryToARRAY ( "SHOW INDEX FROM $database.$table" ); $triggerFolder = array ( 'label' => 'Triggers', 'children' => array ( $triggerArray ) ); return $triggerFolder; } private function _tbl_getStatus( $database, $table ) { return $this->queryToARRAY ( "SHOW TABLE STATUS FROM $database LIKE '$table'" ); } private function _db_getSize( $database ) { $statusSQL = $this->realQuery( "SHOW TABLE STATUS FROM $database" ); $sizeArray = array (); $totalSize = 0; $dataSize = 0; $indexSize = 0; //loop all the results while ( $size = mysqli_fetch_assoc ( $statusSQL ) ) { $dataSize += $size [ 'Data_length' ]; $indexSize += $size [ 'Index_length' ]; } $totalSize = $dataSize + $indexSize; $sizeArray [] = array ( 'totalSize' => $totalSize, 'dataSize' => $dataSize, 'indexSize' => $indexSize ); return $sizeArray; } private function _db_getStatus( $database ) { return $this->queryToARRAY ( "SHOW TABLE STATUS FROM $database" ); } /** * I execute a query and return the results as json. * * @param [string] $sql the query to be executed * @return [json] the result in json */ private function queryToJSON( $sql ) { $result = $this->realQuery( $sql ); while ( $row = mysqli_fetch_assoc ( $result ) ) { $array [] = $row; } return json_encode ( $array ); } /** * I execute a query and return the result as an array. * * @param [string] $sql the query to be executed * @return [array] the result array */ public function queryToARRAY( $sql ) { $query = $this->realQuery( $sql ); $array = array (); while ( $row = mysqli_fetch_assoc ( $query ) ) { $array [] = $row; } return $array; } /** * I get the query status * * @param [string] $sql * @return [json] mysql status with the ('_') striped out */ public function queryStatusToJSON( $sql ) { $result = $this->realQuery( $sql ); while ( $row = mysqli_fetch_assoc ( $result ) ) { //replace some of the names $row = str_replace ( 'Com_', '', $row ); //take out the _ of the rows $row = str_replace ( '_', ' ', $row ); $array [] = $row; } sort ( $array ); return json_encode ( $array ); } public function dump( $title, $var ) { print "<h4>$title</h4>"; print "<pre>"; print_r ( $var ); print "</pre>"; } /** * @return unknown */ public function getMysqli() { return $this->mysqli; } /** * @param unknown_type $mysqli */ public function setMysqli( $mysqli ) { $this->mysqli = $mysqli; } } ?>
Revision: 11983
Initial Code
Initial URL
Initial Description
Initial Title
Initial Tags
Initial Language
at February 26, 2009 07:23 by jonniespratley
Initial Code
Initial URL
Initial Description
Initial Title
MySQL JSON Schema Tree
Initial Tags
sql, php, json, Flex
Initial Language
PHP