php adodb smarty,ADODB结合SMARTY使用~超级强
ADODB結合SMARTY使用~超級強
更新時間:2006年11月25日 00:00:00 ? 作者:
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("iNewsID"),
"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);
這種方式可能從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);
}
}
相關文章
這篇文章主要介紹了PHP經典面試題集錦,搜集整理了常見的php面試題與相關的參考答案,供大家參考借鑒,需要的朋友可以參考下2015-03-03
這篇文章主要介紹了PHP實現廣度優先搜索算法(BFS,Broad First Search),簡單描述了廣度優先搜索算法的原理并結合具體實例分析了php實現廣度優先搜索算法的步驟與相關操作技巧,需要的朋友可以參考下2017-09-09
很多學PHP的人一直也搞不清楚,一個PHP程序員和Java程序員或者是.net程序員有什么不同,告訴你,其實都一樣!2009-12-12
本文給大家總結了一下PHP實現數組字符串搜索的幾種使用技巧,非常的簡單實用,有需要的小伙伴可以參考下2016-07-07
NOT NULL 和NULL...2007-01-01
要求寫一個自定義函數,使 $data = array(12, 43, 87, 45) => $data = array(1, 2, 4, 3, 8, 7, 4, 5);2010-10-10
做新浪微博自動登錄時遇到的,身為一只大大的菜鳥,連登錄腳本都是別人寫好的自己改裝了用上去,到最后才明白那個腳本原來是獲取cookie用的,實在是反應遲鈍、抑或自己不用心2012-01-01
PHP在很多時候不適合做常駐的SHELl進程, 他沒有專門的gc例程, 也沒有有效的內存管理途徑. 所以如果用PHP做常駐SHELL, 你會經常被內存耗盡導致abort而unhappy.2009-06-06
這篇文章主要介紹了Referer原理與圖片防盜鏈實現方法,結合實例形式詳細分析了Referer頭信息原理與圖片防盜鏈判定、實現方法,并附帶一個Http請求封裝類,需要的朋友可以參考下2019-07-07
這篇文章主要介紹了php實現替換手機號中間數字為*號及隱藏IP最后幾位的方法,涉及php字符串替換與正則操作的相關技巧,需要的朋友可以參考下2016-11-11
最新評論
總結
以上是生活随笔為你收集整理的php adodb smarty,ADODB结合SMARTY使用~超级强的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: BGA封装及分类
- 下一篇: 43.XDMA寄存器详解7-MSI-X