バージョン: v2.3.0
はじめに
Medoo を始めるのは簡単です。
要件
- PHP 7.3 以降 (PDO 拡張機能がインストールされている)。
- MySQL、MSSQL、SQLite などの SQL データベース、または別のサポートされているエンジン。
- 対応する PDO ドライバーがインストールされ、有効になっていることを確認してください。
- SQL の基本的な知識。
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;