首頁  >  文章  >  後端開發  >  shimokita glory days ADODB結合SMARTY使用~超強

shimokita glory days ADODB結合SMARTY使用~超強

WBOY
WBOY原創
2016-07-29 08:35:13989瀏覽

Smarty實例教學實例篇(三、使用ADODB連接數據庫)
前兩個月因為工作上的原因一直很忙,所以沒有及時完成這個教程,正好今天週六不用加班,抽個空完成它吧!在開始新的教程的時候,我
先把以前的我寫的那個教程中的一些錯誤的地方修改過來,在這裡要感謝 nesta2001zhang兄弟,是他找出了文章中的一些錯誤,否則真的被別人
罵"誤人子弟了 (說來真是慚愧,我的初稿發布後就發現在一大堆的問題,後來一些時候發重新修改後的文件中居然也出現了錯誤,真是不應該
該...)
在上幾篇教程中的:
========================= ================================
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID", csubstr($db->f("iNewsID"), 0, 20),
"NewsTitle", csubstr($db->f ("vcNewsTitle"), 0, 20));
$i--;
}
======================= ==================================
應該改為:
====== ==================================================== =
while($db->next_record() && $i > 0)
{
$array[] = array("NewsID" => $db->f("iNewsNews"),
"NewsTitle" => csubstr($db->f("vcNewsTitle"), 0, 20));
$i--;
}
=========== ================================================
為什麼這樣改呢?因為第二種方法更清晰明了一些,實際上第一種方式所執行的效果與第二種方法沒什麼差別,而且那幾個程序我都曾經調試過,
沒有任何問題.
好了,那我們今天就先來說說ADODB.說到ADODB,可能做過ASP的都知道WINDOWS平台的ADO組件,但我們這裡的ADODB不是微軟的那個數據庫操
作元件,而是由php語言寫的一套資料庫操作類別庫,先讓我們來看看它倒底有什麼樣的優點.
1. 以標準的SQL語句書寫的資料庫執行程式碼在進行資料庫移植時不用更改原始程式,也就是說它可以支援多種資料庫,包括ACCESS.
2. 提供與微軟ADODB相似的語法功能.這一點對於從ASP轉行到PHP的人們是一大福音,它的很多操作都與WINDOWS中的ADODB相似.
3. 可以產生Smarty循環需要的二維數組,這樣會簡化smarty開發.這一點是等會我給大家演示.
4. 支持數據庫的緩存查詢,最大可能的提高查詢資料庫的速度。
5. 其它的實用功能.
雖然說優點很多,但是由於這個類庫非常的龐大,光它的主執行類就107K,所以如果大家考慮執行效率的話就要認真想想了.不過說實話,它的
功能還是很強大的,有很多的很實用的功能,使用它的這些功能,可以非常方便的實現我們想要的功能.所以對於那些老闆沒有特殊要求時大家不
防用用它
一、如何得到ADODB? 它的運作環境是什麼?
從http://sourceforge.net/project/show...簆hp4.0.5以上。
二、如何安裝ADODB?
解壓縮下載回的壓縮文件,注意:大家下載回來的格式為ADODB.tar.gz,這是linux的壓縮格式,在windows下大家可以使用winrar對其進
行解壓縮,解壓縮完成後將目錄拷貝到指定的目錄的adodb目錄下,像我在例子中將它拷貝到了/comm/adodb/中。
三、如何呼叫ADODB?
使用include_once ("./comm/adodb/adodb.inc.php");這行就不用說了吧?包含ADODB的主檔案。
四、如何使用ADODB?
1.進行初始化:
ADODB採用$conn = ADONewConnection();這樣的語句進行初始化,對ADODB進行初始化有兩種方式:
第一種方式為:傳統方式。我暫時稱它為這個名稱。它使用的建立一個新連線的方式很像php中的標準連結方式:
$conn = new ADONewConnection($dbDriver);
$conn->Connect($host, $user, $passwd, $ db);
簡單吧?如果使用過phplib中的db類別應該對它很熟悉的。
第二種方式:採用dsn方式,這樣是將資料庫的連接語句寫成語句來進行初始化,dsn的寫法有為:$dsn =
"DBType://User:Passwd@Host/DBName "; 其中DBType表示資料庫類型,User表示使用者名,Passwd為密碼,Host為伺服器名,DBName為資料庫名稱
,像這樣我使用oracle資料庫,使用者名稱:oracleUser,密碼為oraclePasswd,資料庫伺服器為localhost , 資料庫為oradb的dsn這樣寫:
$dsn = "oracle://oracleUser:OraclePasswd@localhost/oradb";
$conn = new ADONewConnection($dsn);
$conn = new ADONewConnection($dsn); 這種方式可能從這種方式ASP轉行來的程式設計師會更感興趣。
這兩種方式都可以使用,要看個人習慣來選用了.
2. 相關的概念:
使用ADODB有兩個基本的類,一是ADOConnection類,另一個是ADORecordSet類,使用過ASP的人看到這兩個類會明白它的意義,
ADOConnection指的是資料庫連接的類,而ADORecordSet指的是由ADOConnection執行查詢語句傳回的資料集類,相關的資料大家可以查詢ADODB
類別的手冊。
3.基本的函數:
關於ADOConnection類別的相關方法有:
1.Connect:資料庫連接方法,上邊我們介紹過的。對於mysql還有PConnect,與PHP語言中的用法一樣
2.Execute($sql):執行查詢語句結果回傳一個ADORecordSet類別。
3.GetOne($sql):傳回第一行的第一個欄位
4.GetAll($sql):傳回所有的資料。這個函數可是大有用處,記得不記的我在以前的教程中寫關於新聞列表的輸入時要將需要在頁面顯示的
新聞列表做成一個二維數組?就是這樣的語句:
========================================== ===========================================
while($db ->next_record())
{
$array[] = array("NewsID" => $db->f("iNewsID"),
"NewsTitle" => csubstr($db-> f("vcNewsTitle"), 0, 20));
}
================================ ==================================================== =====
這一行是什麼意思呢?是將要顯示的新聞例表產生
$array[0] = array("NewsID"=>1, "NewsTitle"=>"這裡新聞的第一條");
$array[1] = array("NewsID"=>2, "NewsTitle"=>"這裡新聞的第二條");
...
這樣的形式,但如果我們不需要對標題進行控制,在ADODB中我們就有福了,我們可以這樣寫:
===================================== =============================================
$strQuery = "select iNews, vcNewsTitle from tb_news_ch";
$array = &$conn->GetAll($strQuery);//注意這句話
$smarty->assign("News_CH", array);
unset($array);
====================================== ============================================
當然,這裡的$conn應該要初始化過了,不知大家看明白沒有了?原來我要手動創建的二維資料在這裡直接使用GetAll就行了! ! !這也是
有人會說ADODB+Smarty是無敵組合的原因之一了...
4.SelectLimit($sql, $numrows=-1, $offset=-1, $inputarrr=false ): 回傳一個資料集,大家從語句上也不難看出它是一條限量查詢語
句,與mysql語句中的limit 有異曲同工之效,來一個簡單的例子:
$rs = $ conn->SelectLimit("select iNewsID, vcNewsTitle from tb_news_CH", 5, 1);
看懂了嗎? $rs中保存的是資料庫中從第一記錄開始的5筆記錄。我們知道,在oracle資料庫不支援在SQL語句中使用limit,但是我們如果讓
用ADODB的話,那這個問題就容易解決多了!
5.Close():關閉資料庫,雖然說PHP在頁面結束時會自動關閉,但為了程式的完整大家還是要在頁面結束進行資料庫的關閉。
關於ADORecordSet.ADORecordSet為$conn->Execute($sql)回傳的結果,它的基本函數如下:
1. Fields($colname):傳回欄位的值.
2. RecordCount( ):所包含的記錄數.這個記錄確定資料集的記錄總數.
3. GetMenu($name, [$default_str=''], [$blank1stItem=true], [$multiple_select=false], [ $size=0], [$moreAttr=''])非常好的一個
個函數,使用它可以回傳一個name=$name的下拉式選單(或多選框)!!!當然,它是一個HTML的字串,這是一個令人興奮的好東西,$name指的是
option的name屬性,$default_str是預設選取的字串,$blank1stItem指出第一項是否為空,$multiple_select指出是否為多選框,而我們得到這個
字符串後就可以使用$smarty->("TemplateVar", "GetMenuStr")來在模板的"TemplateVar" 處輸入一個下拉列表(或是多先框)
4. MoveNext():來看一段程式碼:
================================ =========================
$rs = &$conn->Exceute($sql);
if($rs)
{
while($rs->EOF)
{
$array[] = array("NewsID" => $rs->fields["iNewsID"],
"NewsTitle " => 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("NewsID" => $row["iNewsID"] ,
"NewsTitle" => csubstr($row["vcNewsTitle"]), 0, 20);
}
}

以上就介紹了shimokita glory days ADODB結合SMARTY使用~超強,包括了shimokita glory days方面的內容,希望對PHP教程有興趣的朋友有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn