getConnection(); $sql = "SHOW DATABASES"; $query = $database->prepare($sql); $query->execute(); $databases = $query->fetchAll(PDO::FETCH_COLUMN); // Filter out system databases $system_dbs = ['information_schema', 'performance_schema', 'mysql', 'sys']; return array_diff($databases, $system_dbs); } /** * Get all tables in a specific database * @param string $database_name * @return array */ public static function getTablesInDatabase($database_name) { $database = DatabaseFactory::getFactory()->getConnection(); $sql = "SHOW TABLES FROM " . $database_name; $query = $database->prepare($sql); $query->execute(); return $query->fetchAll(PDO::FETCH_COLUMN); } /** * Get detailed information about tables in a database * @param string $database_name * @return array */ public static function getTableDetails($database_name) { $database = DatabaseFactory::getFactory()->getConnection(); $tables = self::getTablesInDatabase($database_name); $table_details = array(); foreach ($tables as $table) { $sql = "SHOW TABLE STATUS FROM " . $database_name . " LIKE :table_name"; $query = $database->prepare($sql); $query->execute(array(':table_name' => $table)); $details = $query->fetch(PDO::FETCH_ASSOC); if ($details) { $table_details[$table] = array( 'engine' => $details['Engine'], 'rows' => $details['Rows'], 'data_size' => self::formatBytes($details['Data_length']), 'index_size' => self::formatBytes($details['Index_length']), 'total_size' => self::formatBytes($details['Data_length'] + $details['Index_length']), 'collation' => $details['Collation'], 'comment' => $details['Comment'] ); } } return $table_details; } /** * Get complete database structure (tables and columns) * @param string $database_name * @return array */ public static function getDatabaseStructure($database_name) { $database = DatabaseFactory::getFactory()->getConnection(); $structure = array(); $tables = self::getTablesInDatabase($database_name); foreach ($tables as $table) { $sql = "DESCRIBE " . $database_name . "." . $table; $query = $database->prepare($sql); $query->execute(); $columns = $query->fetchAll(PDO::FETCH_ASSOC); $structure[$table] = $columns; } return $structure; } /** * Create a new database * @param string $database_name * @return bool */ public static function createDatabase($database_name) { if (!$database_name || !preg_match('/^[a-zA-Z0-9_]+$/', $database_name)) { return false; } $database = DatabaseFactory::getFactory()->getConnection(); try { $sql = "CREATE DATABASE `" . $database_name . "` CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci"; $query = $database->prepare($sql); return $query->execute(); } catch (PDOException $e) { return false; } } /** * Delete a database * @param string $database_name * @return bool */ public static function deleteDatabase($database_name) { if (!$database_name) { return false; } $database = DatabaseFactory::getFactory()->getConnection(); try { $sql = "DROP DATABASE `" . $database_name . "`"; $query = $database->prepare($sql); return $query->execute(); } catch (PDOException $e) { return false; } } /** * Get table columns with details * @param string $database_name * @param string $table_name * @return array */ public static function getTableColumns($database_name, $table_name) { $database = DatabaseFactory::getFactory()->getConnection(); $sql = "SHOW COLUMNS FROM " . $database_name . "." . $table_name; $query = $database->prepare($sql); $query->execute(); return $query->fetchAll(PDO::FETCH_ASSOC); } /** * Format bytes to human readable format * @param int $bytes * @return string */ private static function formatBytes($bytes) { if ($bytes >= 1073741824) { return number_format($bytes / 1073741824, 2) . ' GB'; } elseif ($bytes >= 1048576) { return number_format($bytes / 1048576, 2) . ' MB'; } elseif ($bytes >= 1024) { return number_format($bytes / 1024, 2) . ' KB'; } elseif ($bytes > 1) { return $bytes . ' bytes'; } elseif ($bytes == 1) { return '1 byte'; } else { return '0 bytes'; } } }