m_shige1979のときどきITブログ

プログラムの勉強をしながら学習したことや経験したことをぼそぼそと書いていきます

Github(変なおっさんの顔でるので気をつけてね)

https://github.com/mshige1979

phpでデータベース処理(illuminate/database)

データベースライブラリ(illuminate/database)

フレームワークのlalavelで使用されているよう

準備

composer.jsonを作成
cat <<'_EOT_' > composer.json
{
  "require" : {
    "illuminate/database": "4.0.*"
  }
}
_EOT_
composerをダウンロードして更新
curl -s http://getcomposer.org/installer | php
php composer.phar update
データベースを作成
mysql -uroot -e "create database sample01"
mysql -uroot -e "use sample01; create table table1(id INT NOT NULL AUTO_INCREMENT primary key, title VARCHAR(50), memo VARCHAR(50));"
mysql -uroot -e "use sample01; create table table2(id INT NOT NULL AUTO_INCREMENT primary key, title VARCHAR(50), memo VARCHAR(50));"

mysql -uroot -e "GRANT ALL PRIVILEGES ON *.* TO 'test1'@'localhost' IDENTIFIED BY 'password1'"

mysql -uroot -e "use sample01; insert into table1(title, memo) value('test1', 'memoooooooooooo')";
mysql -uroot -e "use sample01; insert into table1(title, memo) value('test1-2', 'nooooooooooooo')";
mysql -uroot -e "use sample01; insert into table1(title, memo) value('test1-3', 'vvvvvvvvvvvvv')";
mysql -uroot -e "use sample01; insert into table1(title, memo) value('test1-4', 'eeeeeeeeeeeeeee')";
mysql -uroot -e "use sample01; insert into table1(title, memo) value('test1-5', 'qqqqqqqqqqqqqqq')";

実装

ソース
<?php
// autoload
require_once("./vendor/autoload.php");

// use
use Illuminate\Database\Capsule\Manager as Capsule;

// インスタンス作成
$capsule = new Capsule;

// config
$config = [
    'driver'    => 'mysql',
    'host'      => 'localhost',
    'database'  => 'sample01',
    'username'  => 'test1',
    'password'  => 'password1',
    'charset'   => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix'    => '',
];

// 接続
$capsule->addConnection($config);

$capsule->setAsGlobal();

use Illuminate\Events\Dispatcher;
use Illuminate\Container\Container;
$capsule->setEventDispatcher(new Dispatcher(new Container));

$capsule->setAsGlobal();

$capsule->bootEloquent();


// テーブルを指定してデータを取得
$data = Capsule::table('table1')->get();
print_r($data);

// テーブルに条件を指定してデータを取得
$data = Capsule::table('table1')->where('id', '>=', 4)->get();
print_r($data);

// SQLによる抽出
$data = Capsule::select('select * from table1 where id = ?', [3]);
print_r($data);

// トランザクション
Capsule::beginTransaction();

// 追加テスト
$data = Capsule::insert('insert into table2 (title, memo) values(?, ?) ', ["hoge1", "memo1"]);

// ロールバック
Capsule::rollback();

// 追加テスト
$data = Capsule::insert('insert into table2 (title, memo) values(?, ?) ', ["hoge2", "memo2"]);
print_r($data);

// コミット
Capsule::commit();

// データ取得
$data = Capsule::table('table2')->get();
print_r($data);
結果
[vagrant@localhost ~]$ php sample1.php
Array
(
    [0] => Array
        (
            [id] => 1
            [title] => test1
            [memo] => memoooooooooooo
        )

    [1] => Array
        (
            [id] => 2
            [title] => test1-2
            [memo] => nooooooooooooo
        )

    [2] => Array
        (
            [id] => 3
            [title] => test1-3
            [memo] => vvvvvvvvvvvvv
        )

    [3] => Array
        (
            [id] => 4
            [title] => test1-4
            [memo] => eeeeeeeeeeeeeee
        )

    [4] => Array
        (
            [id] => 5
            [title] => test1-5
            [memo] => qqqqqqqqqqqqqqq
        )

)
Array
(
    [0] => Array
        (
            [id] => 4
            [title] => test1-4
            [memo] => eeeeeeeeeeeeeee
        )

    [1] => Array
        (
            [id] => 5
            [title] => test1-5
            [memo] => qqqqqqqqqqqqqqq
        )

)
Array
(
    [0] => Array
        (
            [id] => 3
            [title] => test1-3
            [memo] => vvvvvvvvvvvvv
        )

)
1Array
(
    [0] => Array
        (
            [id] => 2
            [title] => hoge2
            [memo] => memo2
        )

)
[vagrant@localhost ~]$

まとめ

SQL文、モデルなども使用できるようなのでどちらの方法も使える
使用メソッドなどの意味がわかっていないのでそのあたりをあとで調べる必要がありそう
モデルもあるみたいだけど今回はなし

参考2

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

Webアプリエンジニア養成読本[しくみ、開発、環境構築・運用…全体像を最新知識で最初から! ] (Software Design plus)

※実は最初にこれで知った