- Home ›
- PEAR入門 ›
- データベース接続(PEAR::DB) ›
- HERE
特定機能の有無を確認
広告
前のページで見たプリペアドステートメントなどは、データベースによってはサポートしていない場合もあります。利用するデータベースで特定の機能を持っているかどうかを確認が必要な場合、DB_commonクラスで用意されている"provides"メソッドで確認が可能です。
provides boolean provides (string $feature)
選択されたデータベースで、その機能が使用可能であるかどうかを調べます。 パラメータ: string $feature 調べたい機能。 返り値: boolean - 機能がサポートされている場合に TRUE を返します。
確認が可能な機能は下記の4つです。
prepare SQL文の事前チェックを行います。 pconnect 持続的接続をサポートします。 transactions トランザクションをサポートします。 limit SELECTの出力結果を制限する LIMIT をサポートしています。
例えばMySQLに接続した時に、持続的接続をサポートしているかどうかは下記のように確認します。
$dsn = 'mysqli://testuser:testuser@localhost/uriage'; $db = DB::connect($dsn); if ($db->provides('pconnect')) { print('持続的接続が利用可能です。'); }
サンプルプログラム
では実際に試してみます。
<html> <head><title>PHP TEST</title></head> <body> <?php require_once 'DB.php'; print('MySQLへの接続:<br>'); $dsn = 'mysqli://testuser:testuser@localhost/uriage'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } hantei($db); $db->disconnect(); print('<br>PostgreSQLへの接続:<br>'); $dsn = 'pgsql://pguser:pguser@localhost/uriage'; $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } hantei($db); $db->disconnect(); print('<br>SQLiteへの接続:<br>'); $dsn = array( 'phptype' => 'sqlite', 'database' => 'D:¥Apache Group¥Apache2¥htdocs¥sqlite¥test.db', ); $db = DB::connect($dsn); if (PEAR::isError($db)) { die($db->getMessage()); } hantei($db); $db->disconnect(); function hantei($db){ if ($db->provides('prepare')) { print('プリペアドステートメント:利用可能<br>'); }else{ print('プリペアドステートメント:不可<br>'); } if ($db->provides('pconnect')) { print('持続的接続:利用可能<br>'); }else{ print('持続的接続:不可<br>'); } if ($db->provides('transactions')) { print('トランザクション:利用可能<br>'); }else{ print('トランザクション:不可<br>'); } if ($db->provides('limit')) { print('LIMIT:利用可能<br>'); }else{ print('LIMIT:不可<br>'); } } ?> </body> </html>
上記をWWWサーバに設置しブラウザで見てみると下記のようなりました。
例えばMySQLであってもデータベースの種類によってはサポートしている機能に違いがありますのであくまで参考程度にして下さい。実際には各データベースの機能を確認することが必要です。またサポートされていない場合でもプリペアドステートメントのようにPEARでエミュレートしてくれる場合もあります。
( Written by Tatsuo Ikura )