/** * Builds a Table or Table[] taken from database, using a mysqli connection * * @param $mysqli mysqli * @param $table_name string * @param $database_name string * @return Table|Table[] will be a single table only if $table_name is a * single table name without jokers characters */ public static function build(mysqli $mysqli, $table_name = null, $database_name = null) { $tables = []; $result = $mysqli->query('SHOW TABLE STATUS' . (isset($database_name) ? ' IN ' . DQ . $database_name . DQ : '') . (isset($table_name) ? ' LIKE ' . DQ . $table_name . DQ : '')); /** @var $table Table */ while ($table = $result->fetch_object(Table::class)) { foreach (Column::buildTable($mysqli, $table->getName(), $database_name) as $column) { $table->addColumn($column); } foreach (Foreign_Key::buildTable($mysqli, $table->getName(), $database_name) as $foreign_key) { $table->addForeignKey($foreign_key); } $tables[] = $table; } $result->free(); $unique = isset($table_name) && strpos($table_name, '%') === false; return $unique ? reset($tables) : $tables; }