使用済みphpのPEARとDB
// +---------------------------------- ------------------------------------+
// | PHP バージョン 4.0
|// +------------------------------------------ ------------------------+
// |著作権 (c) 1997、1998、1999、2000、2001 PHP グループ
|// +----------------------------- ---------------------------------------+
// |このソース ファイルには、PHP ライセンスのバージョン 2.0 が適用されます。
|// |これは、ファイル LICENSE 内のこのパッケージにバンドルされており、
|// |ワールドワイドウェブから
|// | http://www.php.net/license/2_02.txt。
|// | PHP ライセンスのコピーを受け取っておらず、
|// |ワールドワイド ウェブから入手するには、メモを
|// | License@php.net なので、コピーをすぐに郵送できます。
|// +------------------------------------------ ------------------------+
// |著者: Christian Stocker
|// +------------------------------------------ ------------------------+
//
// $Id: sql2xml.php,v 1.59 2001/11/13 10:54: 02 chregu Exp $
/**
* このクラスは、PEAR::DB-Result オブジェクト、SQL クエリ文字列、または配列を受け取り
* それを XML 表現で返します。
*
* TODO
* -エンコーディングなど、ヘッダーのオプション
* -エラーチェック
*
* 使用例
*
* include_once ("DB.php");
* include_once("XML/sql2xml.php");
* $db = DB::connect("mysql:// root@localhost/xmltest");
* $sql2xml = new xml_sql2xml();
* //次のものはデフォルト以外が必要な場合にのみ必要です
* $sql2xml->setEncoding("ISO-8859- 1","UTF-8");
* $result = $db->query("select * from Bands");
* $xmlstring = $sql2xml->getXML($result);
*
*または
*
* include_once ("DB.php");
* include_once("XML/sql2xml.php");
* $sql2xml = new xml_sql2xml("mysql://root@localhost/xmltest");
* $sql2xml->Add("select * from Bands");
* $xmlstring = $sql2xml->getXML();
*
* 詳しいドキュメントとチュートリアル/ハウツーは、
* http: //php.chregu.tv/sql2xml
*
* @author Christian Stocker
* @version $Id: sql2xml.php,v 1.59 2001/11/13 10:54:02 chregu Exp $
* @パッケージ XML
*/
class XML_sql2xml {
/**
* 結合テーブルをネストして出力する必要がある場合。
* 2 つ以上のクエリを結合した場合、後の
* 指定されたテーブルは前の
* テーブルの結果内にネストされます。
* 現時点でのみ機能しますmysql を自動的に使用します。他の RDBMS の場合
* テーブル リレーションを手動で指定する必要があります (user_tableinfo を参照)
*
* @var boolean
* @see $user_tableinfo, doSql2Xml(), doArray2Xml();
*/
var $nested = True;
/**
* 結果セットのタグ要素の名前
*
* @var string
* @see insertNewResult()
*/
var $tagNameResult = "result";
/**
* 行のタグ要素の名前
*
* @var string
* @see insertNewRow()
*/
var $tagNameRow = "row";
/**
*
* @var object PEAR::DB
* @access private
*/
var $db = Null;
/**
* 拡張クラス (sql2xml_ext など) で使用されるオプション。
* SetOptions で配列 (arrary("user_options" = array()); として渡され、$this-> でアクセスできます。 ;user_options["bla"]
* 追加機能用の拡張クラスから。
* この配列はこの基本クラスでは使用されず、簡単なパラメーター
* を拡張クラスに渡すためだけに使用されます。
*
* @var array
*/
var $user_options = array();
/**
* クラス全体で使用される DomDocument オブジェクト
*
* @var object DomDocument
* @access private
*/
var $xmldoc;
/**
* domxml オブジェクトのルート
* これがクラス変数として必要かどうかはわかりません....
* domxml_root($this->xmldoc);
*
* @var に置き換えることもできますオブジェクト DomNode
* @access private
*/
var $xmlroot;
/**
* この配列は次の目的で使用されます。データベースの構造をクラスに渡します。
* これは、mysql を使用しない場合に特に役立ちます。これは、現時点では、mysql 以外の RDBMS が
* mysql 内のデータベース構造に関する正しい情報を提供できないためです
*クエリ。また、SQL に 2 つ以上のテーブルが結合されている場合は、mysql が実際の関係を見つけることもできません
* パラメータは PEAR::DB の fieldInfo と同じです
* 追加のパラメータもありますもの。ここに来ます:
* PEAR::DB->fieldinfo より:
*
* $tableInfo[$i]["table"] : フィールド #$i が属するテーブル。
* 一部の rdbms/コンパイルの場合クエリや配列では、フィールドが実際にどのテーブルに属しているかを調べることは不可能です
* 。
* ここでより正確に指定できます。または、必要に応じて、そのフィールド
* 実際には記載されているものとは別のテーブルに属します (はい、
* これには次のチュートリアルを参照してください...)
*
* $tableInfo[$i]["name "] : フィールド #$i の名前。クエリや配列が提供するものとは別の
* タグの名前が必要な場合は、ここに割り当てます
* ここでそれを
*
* 追加情報
* $tableInfo["parent_key"][$table] : 親キーのインデックス$table.
* これはプログラムが変更を探すフィールドです。この
* フィールドが変更されると、
に新しい「行セット」が必要であると想定されます。 * 親テーブル
*
* $tableInfo["parent_table"][$table]: $table の親テーブルの名前
*
* @var array
* @access private
*/
var $user_tableInfo = 配列();
/**
* データベースからの入力に含まれるエンコード タイプ
*/
var $encoding_from = "ISO-8859-1";
/**
* XML の出力にはエンコーディング タイプが含まれている必要があります
* (現時点では domxml は UTF-8 のみをサポートしているか、少なくとも UTF-8 のように見えることに注意してください)
*/
var $encoding_to = "gb2312";
var $tagname = "タグ名";
/**
* コンストラクター
* コンストラクターは Pear::DB の「データ ソース名」 (例:
* 「mysql://user:passwd@localhost/dbname」) を取得し、DB に接続
* PEAR::DB オブジェクト リンク、既に接続している場合
* 以前のデータベース
" $dsn として何も指定しない場合は、後で追加できるのは
* pear::db-resultset または配列としてのみです。SQL を提供-strings は機能しません。
* $root パラメータが使用されます。
* root タグに「root」以外の別の名前を指定する場合は、空の文字列 ("") を指定します。 no
* ここでルート要素が作成されますが、結果セット/配列/sql-string を追加する場合に限ります。
* この結果の最初のタグはルート タグとして使用されます。
*
* @param mixed $dsn PEAR:: DB「データソース名」またはオブジェクトDBオブジェクト
* @param string $root xml-docルート要素の名前。
* @access public
*/
function XML_sql2xml ($dsn = Null, $root = "root") {
// 文字列の場合は、dsn 識別子である必要があります。
if (is_string($dsn))
{
include_once ("DB.php");
$this->db = DB::Connect($dsn);
if ( DB::isError($this- >db))
{
print "XML_sql2xml の指定された DSN は、ファイル ".__FILE__." の行 ".__LINE__."
n";
DB_Error($this-& gt;db ->code,PEAR_ERROR_DIE);
}
}
elseif (is_object($dsn) && DB::isError($dsn))
{
print "XML_sql2xml に指定されたパラメータはファイル ".__FILE__ では無効でした." at line ".__LINE__."
n";
return new DB_Error($dsn->code,PEAR_ERROR_DIE);
}
// 親クラスが db_common の場合、それはすでに接続されている識別子です
elseif (get_parent_class($dsn) == "db_common")
{
$this->db = $dsn;
}
$this->xmldoc = domxml_new_xmldoc('1.0');
//うーん、残念ながらうまくいかないようです...誰か解決策を知っていますか?
$this->xmldoc->encoding = $this->encoding_to;
if ($root) {
$this->xmlroot = $this->xmldoc->add_root($root);
//PHP 4.0.6 では、タグ名として $root->name が使用されていました。それがここにあります...
if (!isset($this->xmlroot->{$this->tagname}))
{
$this->tagname = "name";
}
}
}
/**
* xml オブジェクトに新しい結果セットを追加するための一般的なメソッド
* sql-query-string、pear::db_result オブジェクト、または配列を
* 入力パラメーターとして指定すると、メソッドはこの
* 入力に対して適切なメソッドを呼び出しますこれを $this->xmldoc に追加します
*
* @param string sql-string、または object db_result、または array
* @param 次の関数の追加パラメータを混合しました
* @access public
* @see addResult() 、addSql()、addArray()、addXmlFile()
*/
function add ($resultset, $params = Null)
{
// 文字列の場合、クエリ、xml ファイル、または xml 文字列です...
if (is_string($resultset)) {
if (preg_match("/.xml$/",$resultset)) {
$this->AddXmlFile($resultset,$params);
}
elseif (preg_match(" /.*select.*from.*/i" , $resultset)) {
$this->AddSql($resultset);
}
else {
$this-&g t;AddXmlString($resultset);
}
}
// 配列の場合、それは配列です...
elseif (is_array($resultset)) {
$this->AddArray($resultset);
}
if (get_class($resultset) == "db_result") {
$this->AddResult($resultset);
}
}
/**
* xml ファイルのコンテンツを、通常の結果セットと同じレベルの $this->xmldoc に追加します
* (ほとんどは
*
* @param string filename
* @param mixed xpath xpath 式を含む文字列、または「xpath」=>xpath 式と「root」=tag/subtag/etc を含む配列。これらは結果の前に挿入されるタグです
* @access public
* @see doXmlString2Xml()
*/
function addXmlFile($file,$xpath = Null)
{
$fd = fopen( $file, "r" );
$content = fread( $fd, filesize( $file ) );
fclose( $fd );
$this->doXmlString2Xml($content,$xpath);
}
/**
* XML 文字列の内容を $this->xmldoc に、通常の結果セットと同じレベルで追加します
* (ほとんどは
*
* @param string xml
* @param mixed xpath xpath 式を含む文字列、または「xpath」=>xpath 式と「root」=tag/subtag/etc を含む配列。これらは結果の前に挿入されるタグです
* @access public
* @see doXmlString2Xml()
*/