JA 日本語
バージョン: v2.3.0

はじめに

Medoo を始めるのは簡単です。

要件

PHP の PDO 拡張機能一覧

次の一覧は、データベースの種類とプラットフォームに応じてインストールする 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 を使うには PDO をサポートした PHP が必要です。まだ 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' => [
		// DSN で使用する PDO ドライバー名。
		'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 インスタンスから初期化

既に初期化済みの PDO インスタンスから Medoo を作成することもできます。
$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 接続では、Windows と Linux/UNIX のどちらでも通常 pdo_sqlsrv 拡張機能を利用します。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',

	// 任意です。
	// MSSQL で dblib ドライバーを強制的に使用します。
	// デフォルト: sqlsrv。
	'driver' => 'dblib'
]);
Medoo は、sqlsrv ドライバー使用時の MSSQL 接続オプションにも対応しています。詳細は 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 文字列のデバッグ

info() を呼び出すことで、最終的な DSN 文字列を検査できます。
$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;