ドキュメント
リリースカレンダー
リンク
SourceForge.jp SourceForge.JPへ
php.net PHP公式サイトへ

DB

 SyLライブラリで使用するDBは、設定ファイルに記述された接続文字列をデフォルトに 同じ接続文字列の場合は、シングルトン形式で接続を取得します。
 PDOに似た独自のインターフェイスを持っていて、基本的な操作がより簡単にできるように考慮しています。

 また、本ライブラリでは実現できない、または自分には合わないと思った場合は、直接リソースを取得して使用することもできます。

SyL_DBライブラリを使用する場合は、下記3つの手順を行います。

1. 設定ファイル(defines.xml)の SYL_DB_DSN に接続文字列を記述
2. SyL_DBライブラリをインクルードし、getConnection メソッドにより接続を確立する
3. SQLでDBにアクセスする

1. 設定ファイル(defines.xml)の SYL_DB_DSN に接続文字列を記述

 記述方法は、下記のようになります。

[dbtype]:dbname=[dbname];host=[hostname];port=[port];user=[username];
passwd=[password];client_encode=[client_encode];persistent=[persistent]

----------
[dbtype]: 接続するDBの種類(後述)
[dbname]: DB名
[hostname]: ホスト名
[port]: ポート番号
[username]: ユーザー名
[passwd]: パスワード
[client_encode]: クライアントエンコーディング
[persistent]: 持続的接続 1: on, 0: off
----------

例)
<define name="SYL_DB_DSN">pgsql:dbname=syl_db;host=localhost;
port=5432;user=syl_user;passwd=syl_password;client_encode=EUC-JP;
persistent=0</define>

接続できるDBの種類は、[dbtype]により判定します。

対応DB [dbtype] の記述文字列 補足
MySQL mysql
mysqli
 
PostgreSQL pgsql  
Sqlite sqlite PHP5以上
PEAR pear 例外的に接続文字列に使用するDBの種類を含めます。
例) pear:dbtype=mysql;dbname=...
PDO pdomysql
pdopgsql
pdosqlite
pdosqlite2
PHP5以上

※ 使用するDBに対するPHP関数を使用していますので、事前にconfigure等で インストールしてください。(インストール状況はphpinfo関数等で確認できます)

2. SyL_DBライブラリをインクルードし、getConnection メソッドにより接続を確立する

 設定が完了したら、実際にコードを記述し接続してみます。

まず、事前にDBライブラリをロードします。

SyL_Loader::lib('DB');

※ SyLフレームワークを使用しない場合は、SYL_DIR /include/lib/SyL_DB.php を直接インクルードしてください。

次に、コネクションを取得します。

$conn =& SyL_DB::getConnection();

コネクションが確立できたら、下記のように接続状況を確認してみてください。

$conn =& SyL_DB::getConnection($dsn);
// バージョンを取得する
echo "version: " . $conn->getVersion() . "\n";
// 接続リソースを取得する
var_dump($conn->getResource());

--
// PHP 4.4.7 (CLI) と MySQL 5.0.24 の結果
--
version: 5.0.24a
resource(10) of type (mysql link)

--
// PHP 5.2.2 (CLI) と PostgreSQL 8.1.4(PDO) の結果
--
version: 8.1.4
object(PDO)#3 (0) {
}
 

3. SQLでDBにアクセスする

DBの接続が確立できたら、実際にSQLを発行してみます。

// コネクションを取得
$conn =& SyL_DB::getConnection($dsn);
// データを取得するSQL
$sql = "select id, value from ...";
// データ取得を実行し、結果を取得
$result = $conn->query($sql);
// 結果を表示
print_r($result);

--
Array
(
    [0] => Array
        (
            [ID] => 1
            [VALUE] => あああ
        )

    [1] => Array
        (
            [ID] => 2
            [VALUE] => いいい
        )
)

query メソッドの戻り値は、SELECTであれば配列となり、INSERT/UPDATE/DELETE であれば 影響したレコード件数(ただしDB依存します)となります。

SyL_DBの SELECT 操作の注意点として、
(1) 結果は、各DBのリソース型ではなく、配列で返ります。
(2) デフォルトで、結果フィールド名は大文字になります。

結果を「1カラム」「1レコード」「全レコード」で、状況に応じて取得することも可能です。

// コネクションを取得
$conn =& SyL_DB::getConnection($dsn);
// データを取得するSQL
$sql = "select id, value from ...";

// 1カラムを取得
$conn->queryRef($sql, $result, 'one');
// 結果を表示
print_r($result);
echo "\n";

// 1レコードを取得
$conn->queryRef($sql, $result, 'record');
// 結果を表示
print_r($result);
echo "\n";

// 全レコードを取得
$conn->queryRef($sql, $result, 'all');
// 結果を表示
print_r($result);
echo "\n";

--
// 1カラムを取得の結果
1

// 1レコードを取得の結果
Array
(
    [ID] => 1
    [VALUE1] => あああ
)

// 全レコードを取得の結果
Array
(
    [0] => Array
        (
            [ID] => 1
            [VALUE] => あああ
        )

    [1] => Array
        (
            [ID] => 2
            [VALUE] => いいい
        )
)

また、ページ単位での取得も可能です。
queryPageRefメソッドを実行すると、引数でページオブジェクトが参照で返されます。 そのオブジェクトからページ情報を取得でき、ページリンクの生成にも役立ちます。

// コネクションを取得
$conn =& SyL_DB::getConnection($dsn);
// データを取得するSQL
$sql = "select id, value from ... order by id";
// ページ単位のデータを取得
// 10ページ毎の2ページ目を取得
// $result は結果を指定ページのデータ配列。
// $pager はSyLページオブジェクトを参照で取得できます。
$conn->queryPageRef($sql, $result, $pager, 10, 2);
 
// 1ページの件数を取得
echo $pager->getCount();
// 全ページの総件数を取得
echo $pager->getCountAll();
// カレントのページ数を取得
echo $pager->getCurrentPage();
// 総ページ数を取得
echo $pager->getTotalPage();

機能が足りない、インターフェイスが合わないなどの場合、 オリジナルのオブジェクトやリソースを取得して処理を続行することもできます。

$conn_org =& $conn->getResource();