1.DBALを使えるようにする
今回はComposerに依存管理をお願いしてDoctrineを準備してもらいます。
なので、まずはComposerを準備します。
Composer準備
curl -s http://getcomposer.org/installer | php
そしてcomposer.jsonというファイルを準備。
composer.json
{
"require": {
"doctrine/dbal": ">=2.3.0"
}
}
後はComposerに任せるだけ。
php composer.phar install
コマンドの実行後にカレントディレクトリにはvendorというディレクトリが出来ています。
Composerがよしなにしてくれるので、Composerに追加してあるものであれば以下のファイルをインクルードするだけで済みます(便利!)
<?php
include_once "vendor/autoload.php";
次にDoctrineの初期化処理をしていきます。
Doctirne準備
<?php
use Doctrine\DBAL\Configuration;
use Doctrine\DBAL\DriverManager;
// 接続するDBの設定
$conn = [
"driver"=>"pdo_mysql",
"host"=>"localhost",
"user"=>"root",
"password"=>"password",
"dbname"=>"db_name",
"charset"=>"utf8",
];
// デフォルトのフェッチ形式を連想配列にする
$config = new Configuration([ PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC ]);
$doctrine = DriverManager::getConnection( $conn, $config );
これでDBALが利用できるようになりました。
2.SQLを投げてみる
一番シンプルなの
基本的には以下のようにするだけです。
$result = $doctrine->fetchAll( 'SELECT * FROM sample_table' );
var_dump( $result );
バインドを使ってみる
バインドとは何か?
とりあえずは下のソースを見てみましょう!
$result = $doctrine->fetchAll( 'SELECT * FROM sample_table WHERE id = :id', ['id'=>1] );
var_dump( $result );
SQL文中になにやら怪しげなのが!?
id = :id
:が付いているのがありますね。
実は:をつけたものは第二引数で指定している配列上のパラメータに置き換えをしてくれます(便利!!)
これが、バインドという機能です
INSERTしてみる
INSERT/UPDATE/DELETEをする際には、fetchAllではなくexecuteUpdateを使います。
また、返値は行数が帰ってきます。
<?php
$result = $doctrine->executeUpdate(
'INSERT INTO sample_table ( id, description ) VALUES ( :id, :description',
[ 'id'=>2, 'description'=>'INSERTしてみる!' ]
);
var_dump( $result );
書き方のバリエーション
<?php
// ベースとなるSQLをprepareでセット
$stmt = $doctrine->prepare( 'SELECT * FROM sample_table WHERE id = :id' );
// ex. 複数のIDで抽出したいとか(WHERE INとかにするべきなんだろうけどとりあえず
// WHERE IN にする方法があるという気もするけど・・・・
$stmt->bindValue( ':id', 1 );
$stmt->execute();
var_dump( $stmt->fetchAll() );
$stmt->bindValue( ':id', 2 );
$stmt->execute();
var_dump( $stmt->fetchAll() );
// 単一行の抽出ならfetchAssoc()
var_dump( $stmt->fetchAssoc() );
次回、もしかしたらQueryBuilder編が・・・・!