Oihana Php Mysql

MysqlModel extends PDOModel implements ToAssociativeArray uses MysqlDatabaseTrait, MysqlPrivilegeTrait, MysqlTableTrait, MysqlUserTrait

MysqlModel provides high-level MySQL administrative operations using PDO.

It allows you to:

  • Create and drop MySQL databases and users.
  • Grant or revoke privileges.
  • Inspect privilege assignments (grants).
  • Validate identifiers and host syntax.

Requires a properly connected PDO instance with sufficient privileges.

Tags
example
$model = new MysqlModel();

$model->setPDO( $pdoAdmin ) ; // Connect as root or admin user

$model->createDatabase('my_app');
$model->createUser('myuser', 'localhost', 'securepass');
$model->grantPrivileges('myuser', 'localhost', 'my_app');
$model->flushPrivileges();

// Rename the user
$model->renameUser('myuser', 'localhost', 'user', 'localhost');

// Revoke the privilege of the database.
$model->revokePrivileges('user', 'localhost', 'myapp');

// Export the database informations.
print_r( $model->toArray() ) ;

if (!$model->databaseExists('myapp'))
{
   $model->createDatabase('myapp');
}

if ( !$model->userExists('admin', 'localhost') )
{
     $model->createUser('admin', 'localhost', 'strongpass');
}
author

Marc Alcaraz (ekameleon)

since
1.0.0

Table of Contents

Interfaces

ToAssociativeArray

Methods

createDatabase()  : bool
Creates a new MySQL database with given charset and collation.
createUser()  : bool
Creates a new MySQL user with the given username, host, and password.
databaseExists()  : bool
Checks if a MySQL database exists.
dropDatabase()  : bool
Drops a database if it exists.
dropTable()  : bool
Drops a table in the current database.
dropUser()  : bool
Drops a MySQL user if it exists.
flushPrivileges()  : bool
Flushes MySQL privileges.
getDatabaseCharset()  : array{Charset: string, Collation: string}|null
Returns the default character set and collation of a database.
getDatabaseSize()  : int
Returns the size of a database in bytes.
getGrants()  : array<int, string>
Retrieves all GRANT statements for a given user.
getPrivilegesSummary()  : string
Returns a human-readable summary of privileges granted to a user.
getTableSize()  : int
Returns the size of a table in bytes.
getUserInfo()  : array<string|int, mixed>|null
Retrieves complete information about a MySQL user.
grantAllPrivileges()  : bool
Grants all privileges on a database to a user.
grantPrivilege()  : bool
Grants specific privileges on a database or table to a user.
hasAllPrivilegesOnDatabase()  : bool
Checks if the given user has ALL PRIVILEGES on a specific database.
hasAnyPrivilege()  : bool
Checks whether the user has at least one privilege on a given database or table.
hasGlobalAllPrivileges()  : bool
Checks whether the given user has ALL PRIVILEGES globally (i.e., ON *.*).
hasPrivilege()  : bool
Checks whether a user has a specific privilege on a database or table.
listCurrentTables()  : array<int, string>
Lists all tables in the current database.
listDatabases()  : array<int, string>
Lists all available databases.
listDatabasesWithPrivileges()  : array<int, string>
Lists all databases on which a user has at least one privilege.
listPrivileges()  : array<string, array<string|int, string>>
Lists parsed privileges granted to a user.
listUsers()  : array<string|int, mixed>
Returns a list of MySQL users with their associated hosts.
optimizeDatabase()  : bool
Optimizes all tables in a database.
optimizeTable()  : bool
Optimizes a table.
renameTable()  : bool
Renames a table in the current database.
renameUser()  : bool
Renames an existing MySQL user.
repairDatabase()  : bool
Repairs all tables in a database.
repairTable()  : bool
Repairs a table.
revokeAllPrivileges()  : bool
Revokes all privileges from a user at the global level (*.*).
revokePrivilege()  : bool
Revokes specific privileges from a user on a database or table.
revokePrivileges()  : bool
Revokes all privileges from a user on a specific database.
tableExists()  : bool
Checks if a table exists in the current database.
toArray()  : array<string|int, mixed>
Returns the array representation of the instance.
userExists()  : bool
Checks if a MySQL user exists.
getRecommendedCollation()  : string
Returns the recommended collation for the given charset and server version.

Methods

createDatabase()

Creates a new MySQL database with given charset and collation.

public createDatabase(string $name[, string|null $charset = null ][, string|null $collation = null ]) : bool
Parameters
$name : string

The name of the database.

$charset : string|null = null

The character set to use (default: 'utf8mb4').

$collation : string|null = null

The collation to use (auto-selected if null).

Return values
bool —

True on success, false otherwise.

createUser()

Creates a new MySQL user with the given username, host, and password.

public createUser(string $username[, string $host = 'localhost' ][, string $password = '' ]) : bool

If the user already exists, the operation has no effect.

Parameters
$username : string

The username to create.

$host : string = 'localhost'

The host from which the user connects (default: 'localhost').

$password : string = ''

The password for the user.

Return values
bool —

True on success, false otherwise.

databaseExists()

Checks if a MySQL database exists.

public databaseExists(string $name) : bool
Parameters
$name : string

Database name.

Return values
bool —

True if the database exists.

dropDatabase()

Drops a database if it exists.

public dropDatabase(string $name) : bool
Parameters
$name : string

The name of the database to drop.

Return values
bool —

True on success, false otherwise.

dropTable()

Drops a table in the current database.

public dropTable(string $table) : bool
Parameters
$table : string

Table name.

Return values
bool —

True on success.

dropUser()

Drops a MySQL user if it exists.

public dropUser(string $username[, string $host = 'localhost' ]) : bool
Parameters
$username : string

The username to drop.

$host : string = 'localhost'

The host (default: 'localhost').

Return values
bool —

True on success, false otherwise.

flushPrivileges()

Flushes MySQL privileges.

public flushPrivileges() : bool

This reloads the grant tables to apply recent changes (like CREATE USER, GRANT, etc.).

Return values
bool —

True on success, false otherwise.

getDatabaseCharset()

Returns the default character set and collation of a database.

public getDatabaseCharset(string $dbname) : array{Charset: string, Collation: string}|null
Parameters
$dbname : string
Tags
throws
ContainerExceptionInterface
NotFoundExceptionInterface
DependencyException
NotFoundException
ReflectionException
Return values
array{Charset: string, Collation: string}|null

getDatabaseSize()

Returns the size of a database in bytes.

public getDatabaseSize(string $dbname) : int
Parameters
$dbname : string
Tags
throws
Exception
Return values
int —

Size in bytes.

getGrants()

Retrieves all GRANT statements for a given user.

public getGrants(string $username[, string $host = 'localhost' ]) : array<int, string>
Parameters
$username : string

The MySQL username.

$host : string = 'localhost'

The associated host (default: 'localhost').

Return values
array<int, string> —

Array of GRANT statements (or empty if none/failure).

getPrivilegesSummary()

Returns a human-readable summary of privileges granted to a user.

public getPrivilegesSummary(string $username[, string $host = 'localhost' ]) : string

This method parses and formats the privileges returned by SHOW GRANTS into a simple multi-line string, with each line showing the scope (database.table or ALL) and the list of privileges.

Parameters
$username : string

The MySQL username.

$host : string = 'localhost'

The host associated with the user (default: 'localhost').

Tags
example
echo $model->getPrivilegesSummary('user1');
// Output:
// mydb.*: SELECT, INSERT
// mydb.products: SELECT
// ALL: USAGE
Return values
string —

A formatted summary string.

getTableSize()

Returns the size of a table in bytes.

public getTableSize(string $table) : int
Parameters
$table : string

Table name.

Tags
throws
Exception
Return values
int —

Table size in bytes.

getUserInfo()

Retrieves complete information about a MySQL user.

public getUserInfo(string $username[, string $host = 'localhost' ][, bool $throwable = false ]) : array<string|int, mixed>|null
Parameters
$username : string

The username to get information for.

$host : string = 'localhost'

The host (default: 'localhost').

$throwable : bool = false

Indicates if the method should throw exceptions.

Return values
array<string|int, mixed>|null —

Returns user information array or null if user doesn't exist. Array contains: user, host, password_expired, account_locked, password_last_changed, password_lifetime, max_connections, max_questions, max_updates, max_user_connections, plugin, authentication_string, ssl_type, ssl_cipher, x509_issuer, x509_subject, and grants.

grantAllPrivileges()

Grants all privileges on a database to a user.

public grantAllPrivileges(string $username, string $dbname, string $host) : bool
Parameters
$username : string

The user to grant privileges to.

$dbname : string

The database to grant access to.

$host : string

The user's host (usually 'localhost').

Return values
bool —

True on success, false otherwise.

grantPrivilege()

Grants specific privileges on a database or table to a user.

public grantPrivilege(string $privileges, string $dbname, string $username[, string $host = 'localhost' ][, string|null $table = null ]) : bool
Parameters
$privileges : string

A comma-separated list of privileges (e.g. 'SELECT, INSERT').

$dbname : string

Database name.

$username : string

The MySQL user.

$host : string = 'localhost'

Host (default: 'localhost').

$table : string|null = null

Optional table name. If null, grants privileges on the entire database.

Tags
example
$model->grantPrivilege('SELECT, INSERT', 'mydb', 'user1');
$model->grantPrivilege('UPDATE', 'mydb', 'user1', 'localhost', 'products');
Return values
bool —

True if the grant statement executed successfully.

hasAllPrivilegesOnDatabase()

Checks if the given user has ALL PRIVILEGES on a specific database.

public hasAllPrivilegesOnDatabase(string $username, string $database[, string $host = 'localhost' ]) : bool

This method parses the user's GRANT statements and looks for a "GRANT ALL PRIVILEGES ON database.* TO ..." entry.

Parameters
$username : string

The MySQL username to check.

$database : string

The database name to check privileges for.

$host : string = 'localhost'

The host part of the MySQL user (default: 'localhost').

Return values
bool —

True if the user has ALL PRIVILEGES on the database, false otherwise.

hasAnyPrivilege()

Checks whether the user has at least one privilege on a given database or table.

public hasAnyPrivilege(string $username, string $dbname[, string|null $table = null ][, string $host = 'localhost' ]) : bool
Parameters
$username : string

The MySQL user.

$dbname : string

The database name.

$table : string|null = null

Optional table name. If null, checks privileges on the database.

$host : string = 'localhost'

The host (default: 'localhost').

Tags
example
if ($model->hasAnyPrivilege('user1', 'mydb')) {
    echo "User has privileges on the database.";
}
Return values
bool —

True if the user has any privilege on the specified scope.

hasGlobalAllPrivileges()

Checks whether the given user has ALL PRIVILEGES globally (i.e., ON *.*).

public hasGlobalAllPrivileges(string $username[, string $host = 'localhost' ]) : bool
Parameters
$username : string

The MySQL username.

$host : string = 'localhost'

The associated host (default: 'localhost').

Return values
bool —

True if the user has ALL PRIVILEGES globally.

hasPrivilege()

Checks whether a user has a specific privilege on a database or table.

public hasPrivilege(string $username, string $privilege, string $dbname[, string|null $table = null ][, string $host = 'localhost' ]) : bool
Parameters
$username : string

MySQL username.

$privilege : string

Privilege to check (e.g. SELECT, INSERT, ALL PRIVILEGES).

$dbname : string

Database name.

$table : string|null = null

Optional table name. If null, check DB-level privileges.

$host : string = 'localhost'

Host (default: 'localhost').

Return values
bool —

True if the privilege is granted.

listCurrentTables()

Lists all tables in the current database.

public listCurrentTables([bool $throwable = false ]) : array<int, string>
Parameters
$throwable : bool = false
Return values
array<int, string> —

Array of table names.

listDatabases()

Lists all available databases.

public listDatabases([bool $excludeSystem = true ]) : array<int, string>
Parameters
$excludeSystem : bool = true

Exclude system databases like 'information_schema', 'mysql', etc.

Tags
throws
Exception
Return values
array<int, string> —

List of database names.

listDatabasesWithPrivileges()

Lists all databases on which a user has at least one privilege.

public listDatabasesWithPrivileges(string $username[, string $host = 'localhost' ]) : array<int, string>

This method analyzes the output of SHOW GRANTS and extracts database-level or table-level scopes from the privilege definitions. It returns a unique list of database names, including * if the user has global privileges.

Parameters
$username : string

The MySQL username.

$host : string = 'localhost'

The host associated with the user (default: 'localhost').

Tags
example
$databases = $model->listDatabasesWithPrivileges('user1');
// Result: ['mydb', 'test'] or ['*'] if global privileges
Return values
array<int, string> —

List of database names (e.g. ['mydb', 'test', '*']).

listPrivileges()

Lists parsed privileges granted to a user.

public listPrivileges(string $username[, string $host = 'localhost' ]) : array<string, array<string|int, string>>
Parameters
$username : string

The MySQL user.

$host : string = 'localhost'

The associated host (default: 'localhost').

Tags
example
$list = $model->listPrivileges('user1');

foreach ( $list as $scope => $rights)
{
    echo "Privileges on {$scope}:\n - " . implode(', ', $rights) . PHP_EOL ;
}

// Privileges on mydb.*:
// - SELECT, INSERT, UPDATE

// Privileges on mydb.products:
// - SELECT

// Privileges on ALL:
// - USAGE
Return values
array<string, array<string|int, string>> —

[ 'database.table' => [privileges...] ]

listUsers()

Returns a list of MySQL users with their associated hosts.

public listUsers([string|null $like = null ][, bool $grouped = false ][, bool $throwable = false ]) : array<string|int, mixed>
Parameters
$like : string|null = null

Optional SQL pattern to filter users (e.g. 'wp%').

$grouped : bool = false

Whether to group hosts under each username.

$throwable : bool = false

Indicates if the method is throwable.

Return values
array<string|int, mixed> —

If grouped, returns array<string, string[]> (user => [hosts]). Otherwise, returns array<int, array{user: string, host: string}>.

optimizeDatabase()

Optimizes all tables in a database.

public optimizeDatabase(string $dbname) : bool
Parameters
$dbname : string
Tags
throws
Exception
Return values
bool —

True if all tables optimized successfully.

optimizeTable()

Optimizes a table.

public optimizeTable(string $table) : bool
Parameters
$table : string

Table name.

Return values
bool —

True on success.

renameTable()

Renames a table in the current database.

public renameTable(string $from, string $to) : bool
Parameters
$from : string

Current table name.

$to : string

New table name.

Return values
bool —

True if renamed successfully.

renameUser()

Renames an existing MySQL user.

public renameUser(string $fromUser, string $fromHost, string $toUser, string $toHost) : bool
Parameters
$fromUser : string

Current username.

$fromHost : string

Current host.

$toUser : string

New username.

$toHost : string

New host.

Return values
bool —

True if the rename operation was successful, false otherwise.

repairDatabase()

Repairs all tables in a database.

public repairDatabase(string $dbname) : bool
Parameters
$dbname : string
Tags
throws
Exception
Return values
bool —

True if all tables repaired successfully.

repairTable()

Repairs a table.

public repairTable(string $table) : bool
Parameters
$table : string

Table name.

Return values
bool —

True on success.

revokeAllPrivileges()

Revokes all privileges from a user at the global level (*.*).

public revokeAllPrivileges(string $username[, string $host = 'localhost' ]) : bool
Parameters
$username : string

The MySQL username.

$host : string = 'localhost'

The user's host (default: 'localhost').

Tags
example
$model->revokeAllPrivileges('user1');
Return values
bool —

True on success, false otherwise.

revokePrivilege()

Revokes specific privileges from a user on a database or table.

public revokePrivilege(string $privileges, string $dbname, string $username[, string $host = 'localhost' ][, string|null $table = null ]) : bool
Parameters
$privileges : string

Comma-separated privileges (e.g. 'SELECT, INSERT').

$dbname : string

Database name.

$username : string

MySQL user.

$host : string = 'localhost'

Host (default: 'localhost').

$table : string|null = null

Optional table name (null = whole DB).

Tags
example
  1. Remove all modification rights:
$model->revokePrivilege('INSERT, UPDATE, DELETE', 'mydb', 'user1');
  1. Only remove SELECT from a specific table
$model->revokePrivilege('SELECT', 'mydb', 'user1', 'localhost', 'products');
Return values
bool —

True if the statement was executed successfully.

revokePrivileges()

Revokes all privileges from a user on a specific database.

public revokePrivileges(string $username, string $host, string $dbname) : bool
Parameters
$username : string

The user to revoke privileges from.

$host : string

The user's host (usually 'localhost').

$dbname : string

The database to revoke access from.

Return values
bool —

True on success, false otherwise.

tableExists()

Checks if a table exists in the current database.

public tableExists(string $table) : bool
Parameters
$table : string

Table name.

Return values
bool —

True if the table exists.

toArray()

Returns the array representation of the instance.

public toArray([array<string|int, mixed> $options = [] ]) : array<string|int, mixed>
Parameters
$options : array<string|int, mixed> = []
Tags
throws
ContainerExceptionInterface
DependencyException
Exception
NotFoundException
NotFoundExceptionInterface
ReflectionException
Return values
array<string|int, mixed>

userExists()

Checks if a MySQL user exists.

public userExists(string $username[, string $host = 'localhost' ]) : bool
Parameters
$username : string

Username to check.

$host : string = 'localhost'

Host (default: 'localhost').

Return values
bool —

True if the user exists.

getRecommendedCollation()

Returns the recommended collation for the given charset and server version.

protected getRecommendedCollation(string $charset) : string
Parameters
$charset : string
Return values
string
On this page

Search results