Database Setup and Configuration
Supported Databases
The library supports the following databases:
| Database | Driver | Connection String |
|---|---|---|
| MySQL/MariaDB | pdo_mysql | mysql://username:password@hostname:port/database |
| PostgreSQL | pdo_pgsql | pgsql://username:password@hostname:port/database |
| SQLite | pdo_sqlite | sqlite:///path/to/file |
| SQL Server | pdo_dblib (Linux) | dblib://username:password@hostname:port/database |
| SQL Server | pdo_sqlsrv (Windows) | sqlsrv://username:password@hostname:port/database |
Database-Specific Setup
MySQL/MariaDB
-
Required PDO Extension:
sudo apt-get install php-mysql # Debian/Ubuntu
sudo yum install php-mysql # RHEL/CentOS -
Connection String Format:
mysql://username:password@hostname:port/database -
Optional Parameters:
mysql://username:password@hostname:port/database?param1=value1¶m2=value2 -
Transaction Limitations:
MySQL Transaction Limitations
MySQL does not support DDL (Data Definition Language) statements within transactions. Any transaction settings will be ignored for DDL operations like CREATE TABLE, ALTER TABLE, etc.
PostgreSQL
-
Required PDO Extension:
sudo apt-get install php-pgsql # Debian/Ubuntu
sudo yum install php-pgsql # RHEL/CentOS -
Connection String Format:
pgsql://username:password@hostname:port/database -
Transaction Support:
- Full DDL transaction support
- Recommended to use transactions for migrations
SQLite
-
Required PDO Extension:
sudo apt-get install php-sqlite3 # Debian/Ubuntu
sudo yum install php-sqlite3 # RHEL/CentOS -
Connection String Format:
sqlite:///path/to/database.sqlite -
Transaction Support:
- Full DDL transaction support
- Transactions enabled by default
SQL Server
Linux (FreeTDS)
-
Required Packages:
sudo apt-get install php-sybase # Debian/Ubuntu
sudo yum install php-mssql # RHEL/CentOS -
Connection String:
dblib://username:password@hostname:port/database
Windows (Native Driver)
-
Required:
- Microsoft ODBC Driver for SQL Server
- PHP SQL Server extension
-
Connection String:
sqlsrv://username:password@hostname:port/database
Connection Examples
Basic Connections
// MySQL
$uri = new \ByJG\Util\Uri('mysql://user:pass@localhost/database');
// PostgreSQL
$uri = new \ByJG\Util\Uri('pgsql://user:pass@localhost/database');
// SQLite
$uri = new \ByJG\Util\Uri('sqlite:///path/to/database.sqlite');
// SQL Server (Linux)
$uri = new \ByJG\Util\Uri('dblib://user:pass@localhost/database');
// SQL Server (Windows)
$uri = new \ByJG\Util\Uri('sqlsrv://user:pass@localhost/database');
With Optional Parameters
// MySQL with charset and SSL
$uri = new \ByJG\Util\Uri(
'mysql://user:pass@localhost/database?charset=utf8mb4&ssl=true'
);
// PostgreSQL with schema and SSL mode
$uri = new \ByJG\Util\Uri(
'pgsql://user:pass@localhost/database?search_path=public&sslmode=require'
);
Environment Variables
For testing, you can configure database connections using environment variables:
# MySQL
export MYSQL_TEST_HOST=localhost
export MYSQL_PASSWORD=password
# PostgreSQL
export PSQL_TEST_HOST=localhost
export PSQL_PASSWORD=password
# SQL Server
export MSSQL_TEST_HOST=localhost
export MSSQL_PASSWORD=password
# SQLite
export SQLITE_TEST_HOST=/tmp/test.db