RU Русский
Версия: v2.3.0

Начало работы

Начать работу с Medoo легко.

Требования

Список расширений PDO для PHP

В следующем списке показано, какое расширение PDO установить в зависимости от типа вашей базы данных и платформы.
Имя Драйвер
MySQL, MariaDB php_pdo_mysql
MSSQL php_pdo_sqlsrv / php_pdo_dblib
Oracle php_pdo_oci
SQLite php_pdo_sqlite
PostgreSQL php_pdo_pgsql
Sybase php_pdo_dblib

Установка драйвера PDO

Medoo требует PHP с поддержкой PDO. Если PDO еще не установлен, выполните следующие действия.
// Откройте php.ini и удалите начальную точку с запятой у расширения базы данных, которое хотите включить.

// .dll используется в Windows, а .so — в Linux/UNIX.

// До
;extension=php_pdo_mysql.dll
;extension=php_pdo_mysql.so

// После
extension=php_pdo_mysql.dll
extension=php_pdo_mysql.so

// Сохраните файл, затем перезапустите PHP или Apache/Nginx.

// Если PDO установлен правильно, он отобразится в phpinfo().
Или выполните установку из терминала. Расширение PDO будет включено и настроено автоматически.
$ sudo apt-get install php7.4-mysql

Установка через Composer

Если вы используете Composer, установите Medoo с помощью следующей команды.
$ composer require catfan/medoo
Composer автоматически устанавливает зависимость. Запускайте composer update только в том случае, если вам нужно обновить зависимости вручную.
$ composer update

Установка вручную

Простая альтернатива — загрузить medoo.php, поместить его в проект и подключить через require.
require 'Medoo.php';

Конфигурация подключения

Передайте массив конфигурации, чтобы инициализировать Medoo и установить соединение с базой данных.
// Подключите автозагрузчик Composer.
require 'vendor/autoload.php';

// Импортируйте пространство имен Medoo.
use Medoo\Medoo;

$database = new Medoo([
	// Обязательно.
	'type' => 'mysql',
	'host' => 'localhost',
	'database' => 'name',
	'username' => 'your_username',
	'password' => 'your_password',

	// Необязательно.
	'charset' => 'utf8mb4',
	'collation' => 'utf8mb4_general_ci',
	'port' => 3306,

	// Необязательно: префикс таблиц. Все имена таблиц станут вида PREFIX_table.
	'prefix' => 'PREFIX_',

	// Необязательно: включить логирование. По умолчанию отключено для лучшей производительности.
	'logging' => true,

	// Необязательно.
	// Режим обработки ошибок.
	// Определяет, как PDO сообщает об ошибках.
	// PDO::ERRMODE_SILENT (по умолчанию) | PDO::ERRMODE_WARNING | PDO::ERRMODE_EXCEPTION
	// Справка: https://www.php.net/manual/en/pdo.error-handling.php.
	'error' => PDO::ERRMODE_SILENT,

	// Необязательно.
	// Параметры драйвера для соединения.
	// Справка: https://www.php.net/manual/en/pdo.setattribute.php.
	'option' => [
		PDO::ATTR_CASE => PDO::CASE_NATURAL
	],

	// Необязательно: команды, которые будут выполнены после установки соединения с базой данных.
	'command' => [
		'SET SQL_MODE=ANSI_QUOTES'
	]
]);

Пользовательское подключение DSN

Вы также можете предоставить собственный DSN для подключения баз данных, которые Medoo не поддерживает по умолчанию, или для передачи дополнительных параметров DSN.
Формат строки подключения DSN
{драйвер}:{ключ}={значение};{ключ}={значение}
$database = new Medoo([
	'dsn' => [
		// Имя драйвера PDO, используемое в DSN.
		'driver' => 'mydb',
		// Параметры DSN в виде пар ключ-значение.
		'server' => '12.23.34.45',
		'port' => '8886'
	],
	// Необязательно: указывает Medoo, какую специфичную для СУБД логику использовать.
	'type' => 'mysql',

	'username' => 'your_username',
	'password' => 'your_password'
]);

// Итоговая сформированная строка DSN:
mydb:server=12.23.34.45;port=8886

Инициализация из объекта PDO

Вы также можете создать Medoo из существующего инициализированного объекта PDO.
$pdo = new PDO('mysql:dbname=test;host=127.0.0.1', 'user', 'password');

$database = new Medoo([
	// Повторно используйте уже инициализированный и подключенный экземпляр PDO.
	'pdo' => $pdo,

	// Необязательно: указывает Medoo, какую специфичную для СУБД логику использовать.
	'type' => 'mysql'
]);

Для MySQL

Эта опция доступна только для MySQL.
$database = new Medoo([
	// Необязательно: сокет MySQL. Не используйте его одновременно с server и port.
	'socket' => '/tmp/mysql.sock',
]);

Для MariaDB

MariaDB обрабатывается так же, как MySQL. Тип базы данных автоматически сопоставляется с mysql.
$database = new Medoo([
	'type' => 'mariadb',
	'host' => 'localhost',
	'database' => 'name',
	'username' => 'your_username',
	'password' => 'your_password',
]);

Для MSSQL

Современные соединения MSSQL обычно используют расширение pdo_sqlsrv как в Windows, так и в Linux/UNIX. Medoo по умолчанию использует драйвер pdo_sqlsrv. Для устаревших сред, требующих pdo_dblib, установите драйвер явно во время инициализации. Дополнительную информацию см. в https://github.com/Microsoft/msphpsql.
$database = new Medoo([
	'type' => 'mssql',
	'host' => 'localhost',
	'database' => 'name',
	'username' => 'your_username',
	'password' => 'your_password',

	// Необязательно: имя приложения.
	'appname' => 'test',

	// Необязательно.
	// Принудительно использовать драйвер dblib для MSSQL.
	// По умолчанию: sqlsrv.
	'driver' => 'dblib'
]);
Medoo также поддерживает параметры подключения MSSQL при использовании драйвера sqlsrv. Подробности см. на сайте https://docs.microsoft.com/en-us/sql/connect/php/connection-options?view=sql-server-2017.
$database = new Medoo([
	'type' => 'mssql',
	'host' => 'localhost',
	'database' => 'name',
	'username' => 'your_username',
	'password' => 'your_password',

	// Необязательно: параметры подключения MSSQL.
	'application_intent' => 'ReadOnly',
	'attach_db_file_name' => './database.sql',
	'authentication' => 'SqlPassword',
	'column_encryption' => 'Enabled',
	'connection_pooling' => 1,
	'encrypt' => 1,
	'failover_partner' => 'MultiSubnetFailover',
	'key_store_authentication' => 'KeyVaultPassword',
	'key_store_principal_id' => 'AzureName',
	'key_store_secret' => 'AzurePass',
	'login_timeout' => '20',
	'multiple_active_result_sets' => 1,
	'multi_subnet_failover' => 'Yes',
	'scrollable' => 'buffered',
	'trace_file' => './path',
	'trace_on' => 1,
	'transaction_isolation' => PDO::SQLSRV_TXN_SNAPSHOT,
	'transparent_network_ip_resolution' => 'Enabled',
	'trust_server_certificate' => 1,
	'wsid' => 'Computer1'
]);

Для SQLite

База данных файлов
$database = new Medoo([
	'type' => 'sqlite',
	'database' => 'my/database/path/database.db'
]);
База данных памяти
$database = new Medoo([
	'type' => 'sqlite',
	'database' => ':memory:'
]);
Временная база данных
Временная база данных удаляется при закрытии соединения.
$database = new Medoo([
	'type' => 'sqlite',
	'database' => ''
]);

// Или вообще не указывать параметр database.
$database = new Medoo([
	'type' => 'sqlite'
]);

Отладочная строка DSN

Вы можете проверить окончательную строку DSN, позвонив info().
$database = new Medoo([
	'type' => 'mysql',
	'host' => '127.0.0.1',
	'database' => 'test',
	'username' => 'your_username',
	'password' => 'your_password',
]);

echo $database->info()['dsn'];

// mysql:dbname=test;host=127.0.0.1

Тестовый режим

Этот режим полезен для тестов. Вы можете проверить сгенерированные SQL по $database->queryString для разных типов баз данных. Запросы генерируются, но не выполняются.
$database = new Medoo([
	'testMode' => true
]);

// Укажите тип базы данных.
$database->type = 'mysql';

$database->select("account", ["user_name"], ["user_id[>]" => 10]);

echo $database->queryString;