- 追加された行はこの色です。
- 削除された行はこの色です。
#freeze
#setlinebreak(on)
* PEAR::DB データベース制御 [#ya110b96]
[[DB取得メソッド DB_common::getAll, DB_common::getAssoc, DB_common::getOne>PEAR/DB/getDBMethod]]
[[トランザクション制御 DB_common::autoCommit, DB_common::rollback, DB_common::commit>PEAR/DB/autoCommit]]
[[SQLインジェクション防止 DB_common::quoteSmart>PEAR/DB/quoteSmart]]
[[insert, updateマッピング DB_common::autoExecute>PEAR/DB/autoExecute]]
[[DB取得値拡張クラス DB::DB_row>PEAR/DB/DB_row]]
[[改良型PEAR::DB PEAR::MDB>PEAR/MDB]]
[[PEAR::MDB2 真・データベース制御クラス>PEAR/MDB2]]
[[PEAR::DB_DataObject>PEAR/DB_DataObject]]
[[PECL::PDO>PECL/pdo]]
#htmlinsert(googleAdsense.html)
** 概要 [#q83c9da4]
#ref(http://dozo.rgr.jp/img/img20_file.png,right,nolink,around,PHP::PEAR)
ネイティブ関数より遅いから使わない!!
そう言った人がいました。
その人に問いたい。
ネイティブ関数をプログラム上に書きまくりますか?
(ノ・・)ン。。。。。。(((●コロコロッ
[[PEAR概要>http://dozo.matrix.jp/pear/index.php/PEAR.html]]にもあるようにたくさんあるデータベースを設定するだけで変更できます。
基本設定の構文はこうです(マニュアル引用)。
phptype(dbsyntax)://username:password@protocol.hostspec/database
phptype: PHPで使用されるデータベースバックエンド。 (すなわちmysqlやodbc等)
dbsyntax: SQL構文等のデータベース関連構文。
protocol: 使用する通信プロトコル。 (すなわち、tcpやunix等)
hostspec: ホスト指定。 (hostname[:port])
database: DBMSサーバ上のデータベース使用方法。
username: ログイン用ユーザ名。
password: ログイン用のパスワード。
proto_opts: protocolで使用されるオプション。
例えばMySQLを使ってユーザー名を[PEAR]、パスワードを[phptips]でホスト名を[itboost.co.jp]データベース名を[itbtech]とすると、
$dsn = mysql://PEAR:phptips@itboost.co.jp/itbtech
となります。
データベースがMySQLからPostgreSQLになった場合はphptypeの[mysql]を[pgsql]にします。
データベースの制限をユーザー、パスワードでもうけている場合は、ユーザー名・パスワードを別のものにします。
バーチャルホストなどでサーバを複製し、データベースを別のものにしたい場合は、データベース複製後、データベース名を[itbtech]から別の名前変えます。
データベースに接続する場合、「通常」と「永続的」接続があるとおもいます。関数では[XXX_connect][XXX_pconnect]と使い分けるのですが、PEARのDBでは、接続メソッド connect の第二引数で、接続の形態を選択することが可能です。
クエリーを送信するとDB::DB_resultオブジェクトが帰ってきます。その際のエラー処理は接続の時と同じです。
取得したデータはfetchRowで取得します。メソッドを一回実行すれば一レコードが取得されます。レコード数を取得したい場合は、numRowsを使います。
切断はdisconnectを使います。
永続接続をしている場合はdisconnectでは切断できないのは[XXX_close]関数と同じです。
<?
// firebirdを使ったときのサンプル
require_once("DB.php");
$phptype = "ibase(firebird)";
$username = "SYSDBA";
$password = "masterkey";
$hostspec = "localhost";
$port = "3050";
$dbfile = "/opt/firebird/examples/employee.fdb";
$dsn = "$phptype://$username:$password@$hostspec:$port/$dbfile";
$dbObj = & DB :: connect( $dsn, true ); // 永続接続
if( DB :: isError( $dbObj ) ){ // エラー処理
echo $dbObj->userinfo;
exit();
}
$stmt = "SELECT PO_NUMBER, ORDER_STATUS, ITEM_TYPE FROM SALES";
$result = & $dbObj->getAll( $stmt );
if( DB :: isError( $result ) ){
echo $result->userinfo;
exit();
}
echo " Query success ";
foreach( $result as $key => $value ){
echo "$key : ";
echo nl2br( print_r( $value, true ));
}
?>
バグ?
firebird1.5で使用するとセグメントエラー(Segment Error)が発生して止まる。
-ストアド -- &new{2007-03-01 10:57:46 (木)};
-ストアードがなにか? -- [[dozo]] &new{2007-03-13 18:34:39 (火)};
-s/設定だけで/設定するだけで/ のようですね。しかし「IT投資促進税制とは」の文字列がなぜどのページにも表示されるのかがよくわかりません。 -- &new{2007-03-14 20:26:58 (水)};
-- ああhtmlinsertか・・・しかしその意図が昔からわかりません。 -- &new{2007-03-14 20:27:40 (水)};
-あー。昔実験するために入れた文字がまだ残ってました。消しときますね。 -- [[dozo]] &new{2007-03-16 16:06:38 (金)};
-See you -- [[Bill]] &new{2007-03-19 09:24:53 (月)};
-with holiday -- [[ymteejrvxv]] &new{2007-04-10 20:51:05 (火)};
- -- [[swrkoees]] &new{2007-04-14 19:33:16 (土)};
- -- [[iskczbhra]] &new{2007-04-17 16:43:17 (火)};
-Hello, nice site look this: -- [[idxkpkws]] &new{2007-04-18 21:20:58 (水)};