Nemiro.Data.PHP is a small set of utility classes for working with databases MySql and PostgreSQL.
To work with the databases used five simple methods: ExecuteNonQuery, ExecuteScalar, GetData, GetTable and GetRow.
The classes allow you to use parameterized queries, which makes working with databases secure.
Nemiro.Data.PHP is licensed under the Apache License Version 2.0.
- Client for MySql;
- Client for PostgreSQL;
- A single interface to work with different data providers;
- Automatic control of database connections;
- Parameterized queries.
- PHP 5 >= 5.3;
- MySQL >= 5.6;
- PostgreSQL >= 7.4.
NOTE: Working with the earlier versions just has not been tested.
Further support and development of the project is not planned. Welcome to .NET ;-)
The files of the project are made in Visual Studio 2013 with the extension PHP Tools for Visual Studio.
To use the classes in your own projects, it is recommended to put all the solution files in a folder \Nemiro\Data (corresponds to the namespace).
By default, classes use the database connection settings of the following constants:
// MySql
define('MYSQL_DB_NAME', '%your database name here%');
define('MYSQL_DB_USER', '%your database username here%');
define('MYSQL_DB_PASSWORD', '%your database password here%');
define('MYSQL_DB_HOST', 'localhost');
define('MYSQL_DB_PORT', 3306);
define('MYSQL_DB_MODE', 2);
// PostgreSQL
define('PGSQL_DB_NAME', '%your database name here%');
define('PGSQL_DB_USER', '%your database username here%');
define('PGSQL_DB_PASSWORD', '%your database password here%');
define('PGSQL_DB_HOST', 'localhost');
define('PGSQL_DB_PORT', 5432);
define('PGSQL_DB_MODE', 1);
The DB_MODE may be one of the following:
- 0 - manual;
- 1 - auto - open and close for each request;
- 2 - smart (recomended).
You can use individual connection settings, which must be specified when you create an instance of a database client.
To use the database clients, you must include the following files:
require_once './Nemiro/Data/Import.php';
or
require_once './Nemiro/Data/MySql.php';
require_once './Nemiro/Data/PgSql.php';
For convenience, you can import the necessary classes in your code:
// client for MySql
use Nemiro\Data\MySql as MySql;
// client for PostgreSQL
use Nemiro\Data\PgSql as PgSql;
// query builder
use Nemiro\Data\DBCommand as DBCommand;
The following example creates a simple query to select all records from the table [messages]
.
Records obtained by the GetTable method, which returns an array of rows.
// create client instance for MySql
$client = new MySql();
// create a new command
$client->Command = new DBCommand('SELECT * FROM messages');
// get table
$table = $client->GetTable();
// output the table rows
echo '<pre>';
foreach($table as $row)
{
print_r($row);
}
echo '</pre>';
The following example creates a parameterized query to add records to the table [users]
.
The query is executed by the ExecuteScalar method, which returns the ID of added record.
// create client instance for MySql
$client = new MySql();
// create a new command
$client->Command = new DBCommand
(
'INSERT INTO users (username, date_created) '.
'VALUES (@username, @date_created)'
);
// @username and @date_created is parameters name,
// add a values for this parameters
$client->Command->Parameters->Add('@date_created')->SetValue(date('Y-m-d H-i-s'));
$client->Command->Parameters->Add('@username')->SetValue('anyname');
// execute the command
$newId = $client->ExecuteScalar();
echo 'ID = '.$newId;
The following example creates multiple queries and executed by the GetData method, which returns an array of tables.
// create client instance for MySql
$client = new MySql();
// create commands
$firtCommand = new DBCommand('SELECT * FROM users WHERE is_blocked = 0');
$secondCommand = new DBCommand
(
'SELECT * FROM messages WHERE id_users IN '.
'(SELECT id_users FROM users WHERE is_blocked = 0) AND '.
'subject LIKE @search_subject'
);
$secondCommand->Parameters->Add('@search_subject', '%hello%');
$thirdCommand = 'SELECT * FROM files';
// etc...
// add commands to client
$client->Command = array($firtCommand, $secondCommand, $thirdCommand);
// and execute all command
$data = $client->GetData();
// output results
echo '<pre>';
foreach ($data as $table)
{
print_r($table);
}
echo '</pre>';