Zen cart 資料庫封裝類解讀

2022-09-17 20:21:14 字數 3030 閱讀 8404

要運算元據庫,一般步驟基本如此,首先建立到資料庫管理系統的連線,然後選擇資料,接著就是運算元據庫。首先看看queryfactory類,看看1.3.9版本連線資料庫系統的改進:

01

$connectionretry= 10;

02

while(!isset($this->link) || ($this->link == false &&$connectionretry!=0) )

03

07

if($this->link)else

16

}

17

$this->db_connected = true;

18

returntrue;

19

}else

23

}else

這段**比1.3.8的連線邏輯更加的縝密了,首先嘗試10次連線資料系統,1.3.8中只要連線一次連線不上就回顯錯誤,不管怎樣,嘗試多次連線,應該是合理的。另外新版本中引進了db_charset常量,讓我們可以自己指定資料的字元編碼,在1.3.8中,預設並沒有這個考慮,這也就是一些亂碼產生的本質原因,但是zen-cart中文版中為了對付這個問題,加入了mysql_query(『set names 「utf8″『, $this->link)這個語句,相比之下,原作者的水平還是技高一籌啊……

接下來再看看這個方法:

view source

print

?1

functionprepare_input($zp_string)elseif(function_exists('mysql_escape_string'))else

9

}

這個函式用於對資料進行轉義,保證資料安全。這可正所謂是榨乾了油的顧慮啊,同時也知道應該先用mysql_real_escape_string()再用mysql_escape_string()實在不行再用addslashes()。

可以說,這個類中的execute函式是最核心的,先看這個函式開始的這段**:

01

// bof: collect database queries

02

if(defined('store_db_transactions') && store_db_transactions=='true')

10

unset($f);

11

}

12

}

13

// eof: collect products_id queries

剛開始真讓人摸不著北,其實這段**就是記錄資料庫查詢,對應後台 日誌選項->儲存資料庫查詢,系統預設是false,也沒有必要開啟,否則每次查詢將被儲存一條日誌資訊,應該來說,這些資訊沒有太多用處。

接下來這個函式首先根據傳遞進來的引數$zf_cache判斷這個查詢是否需要快取,如果如果需要快取和查詢已經被快取並且快取還沒有過期,就把快取內容吸收回來填充,否則如果沒有快取檔案或者快取檔案過期,但是指定查詢需要快取,那麼先刪除已經快取的檔案(如果有),然後獲取查詢資料,接著快取這個結果集,再否則的話就直接返回查詢資料。從這個原始碼可以看到,execut函式最後是用來查詢,由於其裡面也是使用mysql_query執行sql語句,如果是insert這樣的操作,同樣也是可以被執行的,只是在$obj->recordcount() > 0這個條件時,返回了false,所以並沒有什麼影響,事實上,這個類中也實現了另乙個方法叫perform(),專門用來對付insert和update,這個函式只是execute函式的封裝,只是它新增了除錯跟蹤的機制,看起來,它似乎更好,但是對我習慣了sql語句,並且對sql語句有十足把握能力的來說,我更喜歡直接控制sql語句,我並不想變得更加傻瓜…..

現在來看看queryfactoryresult類,這個是乙個查詢結果集,主要兩個函式,recordcount返回記錄數,movenext移動到下一條記錄,這個類的物件資料在查詢時被填充。從這個層次來說,zen-cart裡面的類,只是為了更加方便的集中函式,類之間的關係比較鬆弛,沒有真正按照物件導向的思維來組織類,總之,zen-cart本身就是乙個面向過程設計思維設計出來的系統,雖然中間用了很多類,不過它只不過是為了更加方便的集中函式,如此而已。

C 封裝資料庫類

using system using system.collections.generic using system.text using system.data using system.configuration using system.web using system.web.securit...

Zen Cart 資料庫抽象層

下面的查詢語句用來檢索給定商品的型號 view plain theproductid 25 global db sql select products model from table products where products id productid sql db bindvars sql ...

php連線資料庫封裝類,php 資料庫的封裝類

php 資料庫的封裝類 class db private link function connectdb dbhost,dbuser,dbpw,dbname pconnect 1 if pconnect if this link mysql pconnect dbhost,dbuser,dbpw t...