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 プラットフォームの ADO コンポーネント上にあることはご存知かもしれませんが、ここで使用する ADODB は Microsoft のデータベース操作コンポーネントではなく、PHP 言語で書かれたデータベース操作クラス ライブラリのセットです。
1 . 標準 SQL ステートメントで記述されたデータベース実行コードは、データベース移植時にソース プログラムを変更する必要がないため、ACCESS を含むさまざまなデータベースをサポートできます。これは、ASP から PHP に切り替える人にとっては朗報です。その操作の多くは、Smarty ループに必要な 2 次元配列を生成できます。 Smarty 開発を簡素化します。これについては後で説明します。
4. データベースのクエリ速度を最大化するために、データベースのキャッシュされたクエリをサポートします。
5. その他の実用的な機能
このクラスライブラリは非常に巨大なので、実行効率を考えると真剣に考える必要があります。
機能は依然として非常に強力で、非常に実用的な機能がたくさんあります。これらの機能を使用すると、必要な機能を実現するのに非常に便利です。そのため、特別な要件がない上司は使用しないでください。
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 クラスです。これら 2 つのクラスの意味については、
ADOConnection はデータベース接続クラスを指し、ADORecordSet はクエリ ステートメントを実行する ADOConnection によって返されるデータ セット クラスを指します。関連情報については、ADODB
Class マニュアルを参照してください。
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(" vcNewsTitle" ), 0, 20));
}
==================================== ===== ============================================ =
この行は、どういう意味ですか?表示するニュース例テーブルを生成します
$array[0] = array("NewsID"=>1, "NewsTitle"=>"The first news item here"); 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 Itがデータセットであることは、mysql ステートメントの制限と同じ効果があることをステートメントから判断するのは難しくありません。 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. GetMenu($name, [$default_str=''], [$blank1stItem=true], [$multiple_select=false]) , [$size=0], [$moreAttr='']) は、name=$name でドロップダウン メニュー (または複数選択ボックス) を返すことができる非常に優れた関数です。 HTML 文字列。これは興味深いものです。$name は
オプションの name 属性を指します。$default_str はデフォルトで選択された文字列です。$blank1stItem は最初の項目が空かどうかを示します。$multiple_select は複数選択ボックスかどうかを示します。この
文字列を取得した後、$smarty->("TemplateVar", "GetMenuStr") を使用して、テンプレート
4 の "TemplateVar" にドロップダウン リスト (または複数のボックス) を入力できます。 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. 行を返します。コードを見てください。 ============ ===================================== =======
$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 には日付と時刻のフォーマット、クエリ ステートメントのフォーマットなど、多くの実用的なテクノロジもあります。出力テーブル、より高度な
キャッシュ クエリ、パラメータを使用したクエリなどについては、自分でマニュアルを確認してください
次に、プログラムを学習し始めます。これは Web プログラムでもあり、comm ディレクトリを再編成しました。同時に効率を向上させるために、Smarty が再カプセル化されました
。mySmarty.class.php は Smarty から継承されたクラスなので、今後はすべてのプログラムで新しいクラス MySmarty のみが呼び出されます。まずディレクトリ構造を見てみましょう:
+Web (サイトのルート ディレクトリ)
|----+comm (Smarty 関連ドキュメント ディレクトリ)
| |----+smarty (Smarty のオリジナル ファイル ディレクトリ) )
| |----+adodb (adodb オリジナルのテキスト ディレクトリ)
| |-----mySmarty.class.php (拡張 Smarty ファイル)
| |-----csubstr.inc (中国語の文字をインターセプト)
|----+cache (Smarty Cache ディレクトリ、*nix で保証される読み取りおよび書き込み権限)
|----+templates (サイトテンプレートファイルの保存ディレクトリ)
| |----header.tpl (ページ ヘッダー テンプレート ファイル)
| |-- --index.tpl (サイト ホームページ テンプレート ファイル)
| |----foot.tpl (ページ フッター テンプレート ファイル)
|ページ テンプレート ファイル)
|
|- ---+templates_c (コンパイル後にテンプレート ファイルが保存されるディレクトリ。*nix では読み取りおよび書き込み権限が保証されます)
|----+css (サイト CSS ファイル ディレクトリ) )
|----+image (サイト画像ディレクトリ)
|----+media (サイト Flash アニメーション保存ディレクトリ)
|----indexbak.htm (ホームページのオリジナルレンダリング)
| ----newsbak,htm (ニュース ページのオリジナル レンダリング)
|----index.php (Smarty ホームページ プログラム ファイル)
|----news.php (Smarty ニュース表示ファイル)
|- ---newsList.php (ニュース一覧表示)
|- ---ルーチン説明.txt (本書)
前の 2 つのチュートリアルと比較して、comm ディレクトリが再構成されています。その他のファイル構造は変更されていません。前の 2 つのチュートリアルと比較すると、サイト全体が変更されており、comm ディレクトリと
index.php と news.php が追加されています。同時に、「国内ニュース」をクリックできるようになります。 「国際ニュース」、「エンタメニュース」のそれぞれのニュースリスト
を実行して、まずindex.phpを見てみましょう:
======== ======================== ======================
index.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 インスタンスオブジェクトを作成します
1. $conn = ADONewConnection("mysql") //ADODB を初期化します
2. ->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. $smarty->assign("News_CH", $rs->>; GetArray(NEWS_NUM));
6. unset($rs);
//国際ニュース部分はここで処理されます
$strQuery = "SELECT iNewsID AS NewsID, vcNewsTitle AS NewsTitle FROM tb_newsID 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"; ("News_MU", $rs->GetArray(NEWS_NUM));
7. $conn->close() ; 以下にあるindex.tplテンプレートをコンパイルして表示します。 ./templates
$smarty->display("index.tpl");
============ ============== =================================================
同様に、重要な場所に数字を追加しました。以下でその意味を説明します。
1. 接続オブジェクト $conn を作成します。全員がここにいます。その初期化は $conn = new の形式では表示されないことに注意してください。 ADONewConnection($dbType)、つまり
、ADONewConnection はクラスではないため、そのソース コードを見てみると、これが単なる関数であることがわかります。2. これは言うまでもなく、ニュース データベースを開きます。ホストは localhost、ユーザー名は root、パスワードは "" です。クエリ ステートメントは、AS キーワードを使用する必要があることに注意してください。ここでフィールドを再確認します。名前はテンプレートに設定したテンプレート変数の名前です
4. Execute を使用してこのクエリを実行すると、結果として RecordSet データ セットが返されます
5。 rs->GetArray($ num) これは、データ セット $rs から $num 行を返します。このようにして、ADODB はそのようなデータを自動的に構築します。
6. メモリ内の関連リソースを閉じる必要はありません。ご覧のとおり、プログラム全体に while ステートメントはなく、プログラムの全体的な構造は非常に明確です。これが、ADODB と Smarty の黄金の組み合わせである理由です。しかし、そうは言っても、単純さには単純な問題があります。はい、ここに表示されるニュース タイトルの長さは制御できません。つまり、ニュース タイトルの長さが 1 行に表示される範囲を超える場合は、自動的に次の行に折り返されます。もちろん、前のセクションで紹介したように、loop ステートメントを使用してこの 2 次元配列を再構築することもできます。前のセクションで紹介した PHPLIB の方法を参照してください...
もう一度ニュースページを見てみましょう
= ================= ================================ ===========
news.php
= ================================= ================= ==========
/********************************************
*
* ファイル名: ニュース。 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)
{$ dbname = "tb_news_ch"; $strQuery = "SELECT vcNewsTitle AS NewsTitle, ltNewsContent AS NewsContent FROM " . $dbName = &$conn->GetRow($strQuery); // 添え字がテンプレートです。変数名
$smarty->display($row);
$conn->Close();
=========== ========================== ======================= ==
重要な点を説明します。実際、news.php 内で説明する価値のある箇所は 1 つだけです。$conn->GetRow($strQuery): この文は、次の形式で 1 次元配列を返します。 :
$array = ("NewsTitle"=>"xxxx", "NewsContent"=>" yyyyy...")
$smarty($array) を使用すると Smarty が何をするか理解できましたか?つまり、これは次と同等です:
$smarty->assign("NewsTitle", "xxxx");
簡単です。とても簡単です
ニュースリストを見てみましょう:
================ ==================== ============================
newsList .php
================= =============================== =================
< ;?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";
case 2:
$tbName = "tb_news_IN";ブレーク;
ケース 3:
$tbName = "tb_news_MU";
$strQuery = "ニュースIDとしてiNewsID、ニュースタイトルからvcNewsTitleを選択" . $rs = &$conn->GetAll($strQuery); 2. ", $NewsType); //この文はニュース リストのリンクになります
3. $smarty->assign("NewsList", $rs);
unset($rs);
$conn->close( );
$smarty->display("newsList.tpl");
=================== === ====================================
それぞれについて説明します:
1. ($ strQuery): この関数は、$strQuery によってクエリされたすべてのデータを、Smarty が認識できる 2 次元配列に結合することです。覚えておいてください。2 次元配列が返されます。は RecordSet ではないので、プログラム内の 3 か所で直接使用できます
2. これは、ニュース タイトルへのリンクを作成するときに GET パラメーター type=XX を要求するために行われます
追記:
ADODB を使用する場合、いくつかの場所があります。 :
1. 初期化: オブジェクトではないため、初期化の方法は new を使用しません。
2. メソッド: 基本的に、すべてのメソッドは大文字で始まる名前を持ち、* と一致しているようです。 NIX の習慣 これは PHP の全体的なスタイルとは少し異なっており、
ここでは大文字と小文字の区別に注意してください
さて、この Smarty シリーズのチュートリアルは基本的にここで完了しています。出発点です。より多くの専門家がより多くの経験を書き留めて、みんなで改善できることを願っています。会社は QQ を開くことを許可していないため、私とコミュニケーションを取りたい場合は、私の MSN: Teacherli@ceua.org を追加してください。一緒に議論することを歓迎します
(出典: Viphot)
http://www.bkjia.com/PHPjc/314055.html
www.bkjia.com