Smarty の実践的な教育例 (3. ADODB を使用してデータベースに接続する)
ここ 2 か月間、仕事の都合で非常に忙しかったため、このチュートリアルを時間内に完了できませんでした。今日は土曜日に残業する必要はないので、少し時間をかけて完了してください! 新しいチュートリアルを開始するときに、まず、以前に書いたチュートリアルのいくつかの間違いを修正しました。ここでいくつかの間違いを見つけてくれたnesta2001zhang 兄弟に感謝します。そうしないと、他の人から「誤解を招く」と叱られました(本当に恥ずかしいです。最初の草稿が公開された後、多くの問題が見つかりました。その後、時々間違いも発見しました)。とても恥ずかしいです
はずです...)
前のチュートリアルで:
================== ======= =========================
while($db->next_record() && $i > 0)
{
$array[] = array("ニュースID", csubstr($db->f("iNewsID"), 0, 20),
"ニュースタイトル", csubstr($db->f("vcニュースタイトル" ), 0, 20)) ;
$i--;
}
=============================== ========== ==================
を次のように変更する必要があります:
=============== =========== ===============================
while($db-> next_record() && $i > 0)
{
$array[] = array("ニュースID" => $db->f("iNewsID"),
"ニュースタイトル" => csubstr($db- >f("vcNewsTitle"), 0, 20));
$i--;
}
======================== ============= =====================
なぜこのように変更するのでしょうか?実際、2 番目の方法の方がわかりやすいからです。最初の方法の効果は 2 番目の方法の効果と同じです。2 つの方法に違いはありません。以前にこれらのプログラムをデバッグしたことがありますが、問題はありません。 さて、今日は ADODB について話しましょう。 ASP を使用したことがある人は、それが WINDOWS プラットフォーム上にあることを知っているかもしれませんが、ここで使用する ADODB は Microsoft のデータベース操作コンポーネントではなく、PHP 言語で書かれたデータベース操作クラス ライブラリのセットです。
1 . 標準 SQL ステートメントで記述されたデータベース実行コードは、データベースの移植時にソース プログラムを変更する必要がないため、ACCESS を含むさまざまなデータベースをサポートできます。これは、Microsoft ADODB に似た構文関数です。これは、ASP から PHP に切り替える人にとっては朗報です。その操作の多くは、Smarty ループに必要な 2 次元配列を生成できます。これは、後で説明するデモで説明します。4. データベースのクエリ速度を最大化するために、データベースのキャッシュされたクエリをサポートします。
5. その他の実用的な機能
メリットはたくさんありますが、このクラスライブラリは非常に巨大なので、メインの実行クラスだけでも107Kあるので、実行効率を考えると真剣に考える必要があります。
機能は依然として非常に強力で、非常に実用的な機能がたくさんあります。これらの機能を使用すると、必要な機能を実現するのに非常に便利です。そのため、特別な要件がない上司は使用しないでください。
1. ADODB の入手方法は何ですか?
http://sourceforge.net/project/show... hp4.0.5 以降。
2. ADODB をインストールする方法
ダウンロードした圧縮ファイルを解凍します。Windows では、解凍後に winrar を使用できます。完了したら、例で /comm/adodb/ にコピーしたように、指定したディレクトリの adodb ディレクトリにディレクトリをコピーします。
3. ADODB を呼び出すには?
include_once ("./comm/adodb/adodb.inc.php") を使用します。 ADODB のメイン ファイルが含まれます。
4. ADODB の使用方法
1. 初期化: ADODB は、初期化に $conn = ADONewConnection(); を使用します。
1 つ目の方法は、従来の方法です。とりあえずそう呼んでおくよ。新しい接続を確立するために使用するメソッドは、PHP の標準接続メソッドと非常によく似ています。
$conn = new ADONewConnection($dbDriver); );
簡単ですよね? phplib で db クラスを使用したことがある場合は、よく知っているはずです。
2 番目の方法: 初期化のためにデータベース接続ステートメントを 1 つのステートメントに記述する dsn メソッドを使用します。 dsn の記述方法は次のとおりです。 $dsn =
"DBType://User:Passwd@Host/DBName";このうち、DBTypeはデータベースの種類を表し、Userはユーザー名を表し、Passwdはパスワード、Hostはサーバー名、DBNameはデータベース名
、私はこのようにOracleデータベースを使用します、ユーザー名:oracleUser、パスワードはoraclePasswd 、データベースサーバーはlocalhost、データベースは次のように記述されます:
$dsn = "oracle://oracleUserraclePasswd@localhost/oradb";
このメソッドはさらに多くの場合があります。 ASP から切り替えたプログラマーにとって興味深いものです。
どちらの方法も使用できますが、個人の習慣によって異なります。
2.ADODB を使用するための 2 つの基本クラスがあります。1 つは ADOConnection クラス、もう 1 つは ADORecordSet クラスです。ASP を使用したことがある人は、これら 2 つのクラスを見ればその意味が理解できるでしょう。ADOConnection はデータベース接続クラスを指します。 ADORecordSet は、クエリ ステートメントを実行する ADOConnection によって返されるデータ セット クラスを参照します。関連情報については、ADODB
クラスのマニュアルを参照してください。
3. 基本機能:
ADOConnection クラスの関連メソッドは次のとおりです:
1.Connect: 上で紹介したデータベース接続メソッド。 mysql の場合は、PHP 言語での使用法と同じ PConnect もあります。
2.Execute($sql): クエリ ステートメントを実行し、ADORecordSet クラスを返します。
3.GetOne($sql): 最初の行の最初のフィールドを返します
4.GetAll($sql): すべてのデータを返します。この機能はとても便利です。前回のチュートリアルでニュース リストの入力について書いたとき、ページに表示する必要がある
ニュース リストを 2 次元配列にする必要があったことを覚えていますか?これが文です:
============================================ =========================================
while($db->next_record ())
{
$array[] = array("ニュースID" => $db->f("iNewsID"),
"ニュースタイトル" => csubstr($db->f("vcニュースタイトル" ), 0, 20));
}
======================================= === ==============================================
この行はどういう意味ですか?表示するニュース例テーブルを生成するためです
$array[0] = array("NewsID"=>1, "NewsTitle"=>"The first news item here");
$array[1] = array( "NewsID"=>2, "NewsTitle"=>"ニュースの 2 番目の記事はこちら");
...
この形式ですが、タイトルを制御する必要がない場合は幸運ですADODB では、次のように記述できます:
======================================== ====== =======================================
$strQuery = " select iNews, vcNewsTitle from tb_news_ch ";
$array = &$conn->GetAll($strQuery);//このステートメントに注意してください
$smarty->assign("News_CH", $array);
unset( $array);
== ========================================== ======= ==============================
もちろん、ここの $conn は初期化されているはずです。わかるかな?手動で作成したい2次元データはここでGetAllを使えばいいことが分かりました! ! !これが、ADODB+Smarty が無敵の組み合わせであると言われる理由の 1 つでもあります... 4.SelectLimit($sql, $numrows=-1, $offset=-1, $inputarrr=false): Return です。このステートメントから、これが制限されたクエリ文であることがわかります。簡単な例を見てみましょう:
$rs = $conn->SelectLimit。 ( "select iNewsID, vcNewsTitle from tb_news_CH", 5, 1);
理解できましたか? $rs にはデータベースの先頭から 5 レコードが保存されます。 Oracle データベースが SQL ステートメントでの制限の使用をサポートしていないことはわかっていますが、ADODB を使用すると、この問題ははるかに簡単に解決できます。
5.Close(): データベースを閉じます。PHP はページが終了すると自動的に閉じますが、プログラムの整合性を保つために、ページの最後でデータベースを閉じる必要があります。
$conn->Execute($sql) に対して ADORecordSet.ADORecordSet によって返される結果について、その基本関数は次のとおりです。
1. Fields($colname): フィールドの値を返します。
2. ): レコードの数が含まれます。このレコードは、データ セット内のレコードの総数を決定します。
3. , [$size=0], [$moreAttr='']) は、name=$name でドロップダウン メニュー (または複数選択ボックス) を返すことができる非常に優れた関数です。 HTML 文字列 (これは興味深いものです)、$name は
オプションの name 属性を指します、$default_str はデフォルトで選択された文字列です、$blank1stItem は最初の項目が空かどうかを示します、$multiple_select はそれが複数選択であるかどうかを示しますこの
文字列を取得した後、$smarty->("TemplateVar", "GetMenuStr") を使用して、テンプレートの "TemplateVar" にドロップダウン リスト (または複数のボックス) を入力できます
4 MoveNext(): コードの一部を見てみましょう:
================================ ============ =============
$rs = &$conn->Exceute($sql);
if($rs)
{
while($rs->EOF)
{
$array[] = array("ニュースID" => $rs->fields["iNewsID"],
"ニュースタイトル" => csubstr($rs-> ;fields["vcNewsTitle"]), 0, 20 );
$rs->MoveNext();
}
}
==================== ============ =========================
MSのものとよく似ていますね? ADODB!
5. MoveFirst()、MoveLast( )、Move($to): 同じです。関数名を見れば、その意味がわかります。
6. FetchRow(): 行を返します。コードを見てください。
============ ==================================== ========
$rs = & $conn->Exceute($sql);
if($rs)
{
while($row = $rs->FetchRow())
{
$array[] = array("ニュースID" => $row["iNewsID"],
"ニュースタイトル" => csubstr($row["vcNewsTitle"]), 0, 20);
}
}
= ================================================= ======
これは 4 と同じ関数を実装していますが、PHP の習慣により沿っているように見えますが、4 の習慣は MS ADODB のメソッドにより似ています。
7.GetArray($num): データセット内の $num 行のデータを返し、それらを 2 次元配列に結合します。
8 の例でこのメソッドを使用します。 mysql_free_result( $rs); と同じです。占有されているコンテンツをクリアします。
さて、ここでは予備的な関数を紹介しますが、これで十分です。実際、ADODB には日付と時刻のフォーマット、クエリ ステートメントのフォーマット、出力テーブル、より高度なキャッシュ クエリ、パラメーターを使用したクエリなどについては、自分でマニュアルを確認してください。
次に、comm ディレクトリを再構成したプログラムを学習し始めます。同時に、効率を向上させるために、Smarty が再カプセル化されました
。mySmarty.class.php は Smarty から継承されるクラスなので、今後はすべてのプログラム ファイルで新しいクラス MySmarty のみが呼び出されます。まずディレクトリ構造を見てみましょう:
+Web (サイトのルート ディレクトリ)
|
|----+comm (Smarty 関連のドキュメント ディレクトリ)
| |
| (Smarty のオリジナル ファイル)ディレクトリ)
| |---+adodb (adodb オリジナルのテキスト ディレクトリ)
| |-----mySmarty.class.php (拡張 Smarty ファイル)
| |-----csubstr.inc (中国語のインターセプト)文字)
|
|---- +キャッシュ (Smarty キャッシュ ディレクトリ、*nix で保証される読み取りおよび書き込み権限)
|
|----+テンプレート (サイト テンプレート ファイルの保存ディレクトリ)
| |
| ---header.tpl (ページ ヘッダー テンプレート ファイル)
| |---index.tpl (サイト ホームページ テンプレート ファイル)
| |---foot.tpl (ページ フッター テンプレート ファイル)
| -news.tpl (ニュース ページ テンプレート ファイル) )
|
|
|----+templates_c (コンパイル後にテンプレート ファイルが保存されるディレクトリ。読み取りおよび書き込み権限は *nix で保証されます)
|
|-- --+css (サイト CSS ファイルディレクトリ)
|
|- ---+image (サイト画像ディレクトリ)
|
|----+media (サイト Flash アニメーション格納ディレクトリ)
|
|---- Indexbak.htm (ホームページのオリジナル レンダリング)
|
|-- --newsbak,htm (ニュース ページのオリジナル レンダリング)
|
|----index.php (Smarty ホームページ プログラム ファイル)
|
|-- --news.php (Smarty ニュース表示ファイル)
|
| ----newsList.php (ニュース一覧表示)
|
|----ルーチン説明.txt (本書)
最初の 2 つとの比較前の 2 つのチュートリアルと比較して、サイト全体の変更は comm ディレクトリと
index.php と news.php だけです。 、index.php を実行した後、ページをクリックすると、それぞれの
ニュース リストが表示されます。まずはindex.php:
================ =========================== ============
index.php
====== ========================== =====================
< ;?php
/**********************************************
*
* ファイル名: Index.php
* 機能: サンプルプログラムを表示
*
* 作者: 先輩
* メール: Teacherli@163.com
*
******************** *************************/
include_once("./comm/mySmarty.class.php") ; //smarty の拡張クラス ファイルが含まれます
include_once("./comm/adodb/adodb.inc.php") //ADODB のメイン実行ファイルが含まれます
include_once("./comm/csubstr.inc");中国語インターセプトクラス
define ("NEWS_NUM", 5); //ニュースリストの表示数を定義します
$smarty = new MySmarty() //smarty インスタンス オブジェクトを作成します $smarty
1. "mysql"); //ADODB を初期化します
2. $conn->Connect("localhost", "root", "", "News") //データベースに接続します
//国内ニュース部分ここで処理されます
3. $strQuery = "SELECT iNewsID AS NewsID, vcNewsTitle AS NewsTitle FROM tb_news_CH ORDER BY iNewsID DESC";
4. $rs = &$conn->Execute($strQuery);
5. ->assign("News_CH", $rs->GetArray(NEWS_NUM));
6. unset($rs) ;
//国際ニュース部分はここで処理されます
$strQuery = "SELECT iNewsID AS NewsID 、vcNewsTitle AS NewsTitle FROM tb_news_IN ORDER BY iNewsID DESC";
$rs = &$conn->Execute($strQuery);
$smarty->assign("News_IN", $rs->GetArray(NEWS_NUM)) ;
unset($rs);
//エンターテイメント ニュース部分はここで処理されます
$strQuery = "SELECT iNewsID AS NewsID, vcNewsTitle AS NewsTitle FROM tb_news_MU ORDER BY iNewsID DESC";
$rs = &$conn-> ;Execute($strQuery);
$smarty->assign("News_MU", $rs->GetArray(NEWS_NUM));
unset ($rs);
7.
// ./templates
$smarty->display("index.tpl") にあるindex.tplテンプレートをコンパイルして表示します
?>
=============; ================================================= =================
同様に、要所要所に数字を追加しました。意味は以下の通りです。1. 接続オブジェクト $conn を作成します。ここで注意すべき点は、その初期の外観が $conn = new ADONewConnection($dbType) の形式で表示されないことです。つまり、ADONewConnection はクラスではないため、作成することはできません。 new はそれを初期化します。ソース コードを見ると、これは単なる関数であることがわかりますね。ホストは localhost です。 root、パスワードは "" です
3. クエリ フィールドは AS キーワードで再識別する必要があることに注意してください。名前はテンプレートに設定したテンプレート変数の名前です。
4 Execute を使用してこのクエリを実行すると、結果は RecordSet データ セット
5 を返します。 $rs->GetArray($num) これは上で紹介したもので、$rs から $num 行を返します。このようにして、ADODB はそのような構造を自動的に構築します
6 。 . これは何も言う必要はありませんね?
7. メモリ内の関連リソースを閉じます。
プログラム全体に while ステートメントがなく、プログラム全体の構造が非常に複雑であることがわかります。これが ADODB+ が黄金の組み合わせである理由ですが、ここで表示されるニュースの見出しの長さは制御できないということを考えたことがあるでしょうか。たとえば、あるニュース見出しの長さが 1 行の表示範囲を超えると、自動的に次の行に折り返されて全体のレイアウトが崩れてしまいます。もちろん、前のセクションで紹介したように、loop ステートメントを使用して目的に合わせてこの 2 次元配列を再構築することもできます。前項で紹介したPHPLIBの方法を参考に…
もう一度ニュースページを見てみましょう
==================== ========================== ===================
news.php
================================================= =============
/**********************************************
*
* ファイル名: news.php
* 機能: ニュース表示プログラム
*
* 作者: 先輩
* メール: Teacherli@163.com
*
******************** *************************/
include_once("./comm/mySmarty.class.php") //smarty の拡張クラス ファイルをインクルードします。
include_once("./comm/adodb/adodb.inc.php"); //ADODB のメイン実行可能ファイルをインクルードします
$smarty = new MySmarty() //smarty インスタンス オブジェクトを作成 $smarty
$conn = ADONewConnection( "mysql"); //ADODB を初期化します
$conn->Connect("localhost", "root", "" , "News") //データベースに接続します
$NewsID = $_GET["id" ]; //ニュース番号を取得
$NewsType = $_GET["type"] //表示するニュースの種類
switch( $NewsType)
{
case 1:
$dbName = "tb_news_CH";
Break;
case 2:
$dbName = "tb_news_IN";
break;
case 3:
$dbName = "tb_news_MU";
break;
}
$strQuery = "SELECT vcNewsTitle AS NewsTitle, ltNewsContent AS NewsContent FROM " . $dbName;
1. $row = &$conn->GetRow($strQuery); // 添え字はテンプレート変数名です
$smarty->display($row);
unset($row);
$conn->Close();
?>
========== ================= ================================= =
実は、ニュースの要点を説明するのは 1 か所だけです。 .php で値が説明されています。
1. $conn->GetRow($strQuery): この文は、For:
$array = ("NewsTitle"=>") という形式で 1 次元配列を返します。 xxxx", "NewsContent"=>"yyyyy...")
$smarty($array) を使用すると Smarty が何をするか理解できましたか? ちなみに、これは次と同等です:
$smarty->assign ("NewsTitle", "xxxx");
$smarty->assign("NewsContent", "yyyyy...");
シンプル、実にシンプルです
ニュースリストを見てみましょう:
================================================ ====================
newsList.php
====================== === =======================================
/* *********************************************
*
* ファイル名: newsList.php
* 機能:ニュース一覧表示プログラム
*
* 作者:先輩
* メール:Teacherli@163.com
*
******************* ***************************/
include_once("./comm/mySmarty.class.php"); //smarty の拡張クラス ファイルをインクルードします
include_once("./comm/adodb/adodb.inc.php") // ADODB メインが含まれます実行ファイル
$smarty = new MySmarty(); //smartyインスタンスオブジェクトを作成 $smarty
$conn = ADONewConnection("mysql") //ADODBを初期化
$conn->Connect("localhost" , "root ", "", "News"); //データベースに接続
$NewsID = $_GET["id"]; //ニュース番号を取得
$NewsType = $_GET["type"]; //表示するニュースの種類
switch($NewsType)
{
case 1:
$tbName = "tb_news_CH";
break;
case 2:
$tbName = " tb_news_IN";
break;
case 3:
$tbName = "tb_news_MU";
break;
}
$strQuery = "$tbNameからiNewsID、vcNewsTitle AS NewsTitleを選択します。 = & $conn->GetAll($strQuery);
2. $smarty->assign("NewsType", $NewsType); //この文はニュース リストにリンクを提供します
3. assign( "ニュースリスト", $rs);
unset($rs);
$conn->close();
$smarty->display("newsList.tpl");
?>
== == =============================================== == ==========
個別に説明しましょう:
1. GetAll($strQuery): この関数の機能は、$strQuery によってクエリされたすべてのデータを 1 つの関数に結合することです。 Smarty によって認識される 2 次元配列です。
覚えておいてください: RecordSet ではなく 2 次元配列を返すため、プログラム内の 3 か所で直接使用できます。これはニュース タイトルにリンクするためのものです。 GET パラメータ type=XX の場合
追記:
ADODB を使用する際に注意すべき点がいくつかあります:
1. 初期化: オブジェクトではないため、初期化の方法は new を使用しません
2.基本的に、各メソッドの名前は大文字で始まります。これは *NIX の習慣とは若干異なるようで、PHP の全体的なスタイルとも異なるため、
ここでは大文字と小文字の区別に注意してください。さて、この Smarty の一連のチュートリアルは基本的にここで完了しました。私のこれらのいくつかの基本的なチュートリアルは単なる出発点です。会社は QQ を開くことを許可していないため、より多くの専門家がより多くの経験を書き留めてくれることを願っています。私とコミュニケーションを取りたい場合は、私の MSN を追加してください: Teacherli@ceua.org 一緒に議論することを歓迎します
=================