PHP 敏捷開(kāi)發(fā)框架CodeIgniter_第1頁(yè)
PHP 敏捷開(kāi)發(fā)框架CodeIgniter_第2頁(yè)
PHP 敏捷開(kāi)發(fā)框架CodeIgniter_第3頁(yè)
PHP 敏捷開(kāi)發(fā)框架CodeIgniter_第4頁(yè)
PHP 敏捷開(kāi)發(fā)框架CodeIgniter_第5頁(yè)
已閱讀5頁(yè),還剩5頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1、第二章第三章第四章 使用CI簡(jiǎn)化數(shù)據(jù)庫(kù)開(kāi)發(fā) David Upton翻譯:CodeIgniter中國(guó)你學(xué)習(xí)CI是因?yàn)槟阆胍咕幊谈菀缀透猩a(chǎn)力。本章講述CI的Active Record類(lèi)。 如果CI只提供了一個(gè)Active Record類(lèi),那么它也是物超所值的。當(dāng)然,CI是免費(fèi)的,只不過(guò)我要強(qiáng)調(diào)Active Record類(lèi)的價(jià)值是非常高的,它是你提高生產(chǎn)力的主要工具。Active Record使你以最小的代價(jià)獲得最大的回報(bào)。它簡(jiǎn)單、易于使用和維護(hù)。本章描述CI如何連接到一個(gè)數(shù)據(jù)庫(kù),你如何使用Active Record操縱數(shù)據(jù)庫(kù)。你將會(huì)見(jiàn)到:l Active Record類(lèi)與傳統(tǒng)PHP/MyS

2、QL接口的比較l 如何編寫(xiě)“讀取”查詢(xún),并顯示結(jié)果l 如何做創(chuàng)建、更新和刪除的查詢(xún)CI保留讓你用傳統(tǒng)的方法編寫(xiě)數(shù)據(jù)庫(kù)查詢(xún),但是我不會(huì)詳細(xì)介紹這部分內(nèi)容。它的知識(shí)完全被在線(xiàn)用戶(hù)指南所包括。使用Active Record類(lèi)后,你可能不會(huì)再用傳統(tǒng)的方式來(lái)做數(shù)據(jù)庫(kù)查詢(xún)了。配置設(shè)置你或許已經(jīng)注意到在這本書(shū)的大多數(shù)的章節(jié)會(huì)談到system/application/config 文件夾和里面的配置文件。這些文件對(duì)控制CI按要求工作相當(dāng)必要。而且你可以讓大部分的配置參數(shù)等于系統(tǒng)的默認(rèn)值。database配置文件在正常使用數(shù)據(jù)庫(kù)之前需要進(jìn)行設(shè)置。基本上,你僅僅必須告訴它你的數(shù)據(jù)庫(kù)在哪里、它是什么類(lèi)型。文件的默認(rèn)

3、值為:代碼如下:$active_group = "default"$db'default''hostname' = ""$db'default''username' = ""$db'default''password' = ""$db'default''database' = ""$db'default''dbdriver' = &quo

4、t;"(譯注:到CodeIgniter 版時(shí)又多了如下一些內(nèi)容)代碼如下:$db'default''db_debug' = TRUE;$db'default''cache_on' = FALSE;$db'default''cachedir' = ""$db'default''char_set' = "utf8"$db'default''dbcollat' = "utf8_gen

5、eral_ci"其他的選項(xiàng)可以保留為默認(rèn)值。 必選項(xiàng)是:l hostname:你的數(shù)據(jù)庫(kù)的位置,例如,'localhost' 或一個(gè)IP地址l username和password:數(shù)據(jù)庫(kù)用戶(hù)的用戶(hù)名和密碼必須有充分的權(quán)限,允許你的網(wǎng)站存取數(shù)據(jù)庫(kù)中的數(shù)據(jù)。這不同于(通常)你的網(wǎng)站或ISP控制面板的用戶(hù)名和密碼。l database:你的數(shù)據(jù)庫(kù)的名字,例如,'websites'l dbdriver:你正在使用的數(shù)據(jù)庫(kù)的類(lèi)型,CI可接受的選項(xiàng)有MySQL、MySQLi、PostgreSQL、ODBC和MSSQL。以我的經(jīng)驗(yàn)來(lái)看,最困難的事情之一就是把新的CI

6、網(wǎng)站連接到數(shù)據(jù)庫(kù)。你可能需要查詢(xún)你的ISP。有時(shí)他們的數(shù)據(jù)庫(kù)運(yùn)行在與他們的Web服務(wù)器的IP地址不同的地方。如果你正在使用MySQL,他們可能提供phpMyAdmin,通常告訴你hostname這可能是'localhost'或者它可能是一個(gè)IP地址。你可能注意到config文件的內(nèi)容實(shí)際上是一個(gè)多維數(shù)組。在$db數(shù)組里包含一個(gè)叫做default的數(shù)組,你所做的設(shè)置就是往里增加鍵/值對(duì),例如hostname = 127.0.0.1。你還可以增加其他的數(shù)據(jù)庫(kù)設(shè)置,通過(guò)改變$active_group的設(shè)置可以容易地更改數(shù)據(jù)庫(kù)。這為網(wǎng)站連接到多個(gè)數(shù)據(jù)庫(kù)提供了可能性舉例來(lái)說(shuō),一個(gè)測(cè)試數(shù)據(jù)

7、庫(kù)和一個(gè)產(chǎn)品數(shù)據(jù)庫(kù)。你可以很容易地在他們之間切換?;蛘吣憧梢栽趦蓚€(gè)數(shù)據(jù)庫(kù)之間交換數(shù)據(jù)。為我們的網(wǎng)站設(shè)計(jì)數(shù)據(jù)庫(kù)我想表達(dá)的是CI能用來(lái)開(kāi)發(fā)正式的網(wǎng)站。我現(xiàn)在正在維護(hù)客戶(hù)的一些網(wǎng)站,而且我想要監(jiān)控他們,用我設(shè)計(jì)的方法測(cè)試它們,用數(shù)據(jù)庫(kù)保存我想要的數(shù)據(jù),而且可以得到這些網(wǎng)站的分析報(bào)告。因此讓我們?cè)囍鴦?chuàng)建它。先讓我們確定一些目標(biāo)。它們是:1. 用最少的人工干預(yù)管理一個(gè)或更多的遠(yuǎn)程網(wǎng)站2. 對(duì)遠(yuǎn)程網(wǎng)站進(jìn)行定期的測(cè)試3. 生成符合要求的分析報(bào)告,提供網(wǎng)站的詳細(xì)信息和測(cè)試結(jié)果因此,首先我們將需要一個(gè)網(wǎng)站的數(shù)據(jù)庫(kù)。在MySQL中建立一個(gè)名為websites的數(shù)據(jù)庫(kù),你也可以使用別的RDBMS?,F(xiàn)在,我們需要增加

8、一些表來(lái)保存各種數(shù)據(jù)。讓我們?yōu)榫W(wǎng)站增加一張表,字段有URL,他們的名字和密碼/用戶(hù)名,和他們的類(lèi)型。我們也將會(huì)為每個(gè)網(wǎng)站建立一個(gè)ID字段。而且在MySQL數(shù)據(jù)庫(kù)中,至少需要為每個(gè)實(shí)體生成一個(gè)唯一的ID,可以使用自動(dòng)增量類(lèi)型來(lái)達(dá)到這一目的。每個(gè)網(wǎng)站可能被放置在不同的主機(jī)上,我們需要另一個(gè)hosts表來(lái)保存這個(gè)信息。一般有一個(gè)域名與主機(jī)相關(guān)聯(lián),所以我們需要一個(gè)domains表來(lái)保存有關(guān)域名的信息,還需要一個(gè)people表來(lái)記錄這些人的姓名,密碼,郵件地址,備用郵件地址, 號(hào)碼,甚至寵物的名字,可能還有其它的一些什么。因此我們的網(wǎng)站數(shù)據(jù)庫(kù)表需要包括這樣一些字段:域名ID、主機(jī)ID、兩個(gè)人員ID,一個(gè)

9、存放網(wǎng)站站長(zhǎng)的ID和一個(gè)存放網(wǎng)站管理人的ID(管理人為網(wǎng)站提供技術(shù)支持,保證網(wǎng)站正常運(yùn)行。)你能見(jiàn)到,這是一個(gè)完整的關(guān)系型數(shù)據(jù)庫(kù),讓我們來(lái)建立它?。ū菊碌母戒浿杏性摂?shù)據(jù)庫(kù)的詳細(xì)資料,如果你想創(chuàng)建這個(gè)數(shù)據(jù)庫(kù),請(qǐng)執(zhí)行該MySQL查詢(xún)。)我們現(xiàn)在要用一個(gè)更簡(jiǎn)單容易的方法來(lái)實(shí)現(xiàn)這一切。所以,讓我們看看CI框架為我們提供了什么功能,我們要重點(diǎn)介紹Active Record類(lèi)。Active Record“Active Record”是一個(gè)“設(shè)計(jì)模式”。另一方面又是一個(gè)高度抽象的系統(tǒng),就像MVC,它提供一個(gè)解決公共編程問(wèn)題的模板,并且也有一些枯燥無(wú)味的書(shū)籍。它本身不是代碼,只是一個(gè)代碼的模式。對(duì)于A(yíng)ctiv

10、e Record,有一些不同的解釋。它的核心是在你每次執(zhí)行查詢(xún)時(shí),把你的數(shù)據(jù)庫(kù)與一個(gè)對(duì)象建立一個(gè)對(duì)應(yīng)關(guān)系。每一張數(shù)據(jù)庫(kù)表是一個(gè)類(lèi),每一行是一個(gè)對(duì)象。所有你需要做的只是創(chuàng)建它、讀取它、修改它或者刪除它。例如,“方法”,是從類(lèi)繼承而來(lái)。Ruby on Rails是使用Active Record模式的,CI也是,盡管這兩種框架實(shí)現(xiàn)Active Record的方式有一點(diǎn)不同。理論的東西夠多了這是什么意思呢?好吧,用代碼簡(jiǎn)單和清楚地描述一下吧。使用Active Record類(lèi)的優(yōu)點(diǎn)Active Record節(jié)約你的時(shí)間,自動(dòng)運(yùn)作,使SQL語(yǔ)句方便易懂。節(jié)約時(shí)間當(dāng)你在PHP中編寫(xiě)一個(gè)常規(guī)數(shù)據(jù)庫(kù)查詢(xún)時(shí),你每

11、次一定要與數(shù)據(jù)庫(kù)建立連接。對(duì)CI來(lái)說(shuō),第一次連接數(shù)據(jù)庫(kù)時(shí),你在每個(gè)控制器或模型的構(gòu)造函數(shù)里放入這樣一行:代碼如下:$this->load->database();一旦你這樣做了,你不需要重復(fù)連接,在那個(gè)控制器或模型中就可以執(zhí)行任意多次的查詢(xún)。你已經(jīng)在config文件中設(shè)置了關(guān)于數(shù)據(jù)庫(kù)的參數(shù),就象我們?cè)谶@一章開(kāi)始時(shí)看到的一樣。再一次,這使更新你的網(wǎng)站比較容易,如果你想要改變數(shù)據(jù)庫(kù)名字、密碼或位置的話(huà)。自動(dòng)機(jī)制你一旦已經(jīng)連接到數(shù)據(jù)庫(kù),CI的Active Record生成隱含的代碼。舉例來(lái)說(shuō),如果你進(jìn)行下列的插入操作:代碼如下:$data = array( 'title'

12、 => $title, 'name' => $name, 'date' => $date );$this->db->insert('mytable', $data);你正在插入的數(shù)據(jù)已經(jīng)在幕后轉(zhuǎn)換成這樣一行代碼:代碼如下:function escape($str) switch (gettype($str) case 'string': $str = "'".$this->escape_str($str)."'" break; case &

13、#39;boolean': $str = ($str = FALSE) ? 0 : 1; break; default : $str = ($str = NULL) ? 'NULL' : $str; break; return $str;換句話(huà)說(shuō),CI框架使你的代碼變得更強(qiáng)健。現(xiàn)在,讓我們看看它是如何工作的。第一, 連接數(shù)據(jù)庫(kù)非常簡(jiǎn)單。在傳統(tǒng)的PHP編程時(shí),你可能是這樣做的:代碼如下:$connection = mysql_connect("localhost","fred","12345");mysql_se

14、lect_db("websites", $connection);$result = mysql_query ("SELECT * FROM sites", $connection);while ($row = mysql_fetch_array($result, MYSQL_NUM) foreach ($row as $attribute) print "$attribute1 "換句話(huà)說(shuō),你必須重復(fù)地輸入host、username和password,建立一個(gè)連接,然后選擇一個(gè)連接的數(shù)據(jù)庫(kù)。你必須每次都這樣做,然后再開(kāi)始一個(gè)查詢(xún)。C

15、I以一條命令替換連接工作:代碼如下:$this->load->database();在每個(gè)控制器、模型或者其它類(lèi)的構(gòu)造函數(shù)里放入這條命令。之后,你就可以直接開(kāi)始查詢(xún)了。連接數(shù)據(jù)被保存在你的database 配置文件中,CI每次都會(huì)去那里查詢(xún)它。因此,在每個(gè)CI函數(shù)中,你可以直接進(jìn)行數(shù)據(jù)庫(kù)查詢(xún)。上面的查詢(xún)?cè)贑I中被轉(zhuǎn)換成:代碼如下:$query = $this->db->get('sites'); foreach ($query->result() as $row) print $row->url 很簡(jiǎn)單,不是嗎?本章的余下部分給出不同查詢(xún)的用

16、法?!白x取”查詢(xún)常用的查詢(xún)是取回來(lái)自數(shù)據(jù)庫(kù)的數(shù)據(jù)。完成一個(gè)“讀取”查詢(xún)的基本指令是:代碼如下:$query = $this->db->get('sites');這是一個(gè)“SELECT *”查詢(xún),目標(biāo)是sites表。換句話(huà)說(shuō),它取回所有字段。如果你偏愛(ài)分開(kāi)來(lái)寫(xiě),你可以這樣做:代碼如下:$this->db->from('sites');$query = $this->db->get();如果你想要“SELECT”特定的列,而不是全部列,這樣做:代碼如下:$this->db->select('url',

17、'name', 'clientid');$query = $this->db->get('sites');你可能要對(duì)結(jié)果排序,你可以在$this->db->get語(yǔ)句前插入:代碼如下:$this->db->orderby("name", "desc");desc是降序的意思。你也可以選擇asc(升序)或rand(隨機(jī))。你也可能想要限制返回的行數(shù),比如你想要最初的五個(gè)結(jié)果。你可以在get語(yǔ)句前插入:代碼如下:$this->db->limit(5); 當(dāng)然,在大

18、多數(shù)的查詢(xún),你不喜歡返回表中的所有記錄。數(shù)據(jù)庫(kù)具有按給定條件過(guò)濾返回結(jié)果的能力。這通常使用where子句來(lái)實(shí)現(xiàn),CI這樣表達(dá):代碼如下:$this->db->where('clientid', '1'); 這條語(yǔ)句會(huì)查找客戶(hù)ID是1的客戶(hù)相連的所有的網(wǎng)站。但是這對(duì)我們并不是很有幫助,我們并不會(huì)記住people表的ID。對(duì)人來(lái)說(shuō),用姓名是比較合理的辦法,因此我們需要連接到people表:代碼如下:$this->db->from('sites');$this->db->join('people',

19、'sites.peopleid = people.id');有SQL知識(shí)的人都知道,這相當(dāng)于:代碼如下:SELECT * FROM sites JOIN people ON注意SQL的約定,如果一個(gè)列名在二張表中是重復(fù)的,的意思是在sites表中的peopleid字段。在進(jìn)行SQL多表查詢(xún)時(shí),最好把列名進(jìn)行唯一性的標(biāo)識(shí),這樣可以避免產(chǎn)生岐義,也可以讓你自己明了。你可以增加更多的where子句的操作符。舉例來(lái)說(shuō),增加否定操作符:代碼如下:$this->db->where('url !=', ' mysite ');或比較操作符:代碼如下

20、:$this->db->where('id >', '3');或組合語(yǔ)句(“WHEREAND”):代碼如下:$this->db->where('url !=', ' mysite ');$this->db->where('id >', '3');或使用$this->db->orwhere()來(lái)表示(“WHEREOR”):代碼如下:$this->db->where('url !=', ' mysite &#

21、39;);$this->db->orwhere('url !=', ' anothersite ');現(xiàn)在讓我們建立一個(gè)完整的查詢(xún):代碼如下:$this->db->select('url','name','clientid','people.surname AS client');$this->db->where('clientid', '3');$this->db->limit(5);$this->db->

22、from('sites');$this->db->join('people', 'sites.clientid = people.id');$this->db->orderby("name", "desc");$query = $this->db->get();這應(yīng)該取得前五個(gè)(用姓名排序)網(wǎng)站,這些網(wǎng)站屬于3號(hào)客戶(hù),而且還顯示客戶(hù)的姓和他(她)的ID號(hào)!使用Active Record的潛在好處是已經(jīng)進(jìn)行了自動(dòng)的轉(zhuǎn)義,因此,你不必關(guān)心轉(zhuǎn)義的問(wèn)題。這適用于這樣的函數(shù)像$th

23、is->db->where(),以及在下一段中描述的數(shù)據(jù)插入和修改語(yǔ)句。(安全警告:這不同于阻止跨站腳本攻擊對(duì)付這個(gè)你需要CI的xss_clean()函數(shù)。它也不相同于驗(yàn)證你的數(shù)據(jù)對(duì)付這個(gè)你需要CI的驗(yàn)證類(lèi),詳見(jiàn)第五章。)顯示查詢(xún)結(jié)果在CI顯示查詢(xún)結(jié)果相當(dāng)簡(jiǎn)單。假定我們定義了上述的查詢(xún)語(yǔ)句,最后一句是:代碼如下:$query = $this->db->get();然后,如果有多個(gè)結(jié)果,他們被保存在$row對(duì)象中,你可以用一個(gè)foreach循環(huán):代碼如下:foreach($query->result() as $row) print $row->url; pr

24、int $row->name; print $row->client;或如果我們只想要一個(gè)結(jié)果,它可以作為一個(gè)對(duì)象被返回,或在這里當(dāng)做一個(gè)$row數(shù)組:代碼如下:if ($query->num_rows()>0) $row =$query->row_array(); print $row'url' print $row'name' print $row'client'相比數(shù)組而言,我更喜歡對(duì)象語(yǔ)法,因?yàn)樗?jiǎn)潔!如果你遵守MVC模式,你將會(huì)在模型中保存你的查詢(xún)和數(shù)據(jù)庫(kù)交互,然后通過(guò)視圖顯示數(shù)據(jù)?!皠?chuàng)建”和“更新”查詢(xún)

25、Active Record有三個(gè)函數(shù)幫你在數(shù)據(jù)庫(kù)內(nèi)生成新的實(shí)體,它們是$this->db->insert()、$this->db->update和$this->db->set()。“create”和“update”的不同之處是“create”是向表中插入一條全新的記錄,而“update”是修改表中已經(jīng)存在的記錄。因此對(duì)“update”,你必須首先定位需要修改的記錄。CI用數(shù)組來(lái)保存數(shù)據(jù),或是使用$this->db->set();你可以任選一種。因此,如果要在websites數(shù)據(jù)庫(kù)的sites表中加入一行。首先,確保在我們的控制器中的構(gòu)造函數(shù)加入:

26、代碼如下:$this->load->database();我們想要增加一個(gè)新的網(wǎng)站,包含有一個(gè)網(wǎng)址,一個(gè)名字,一個(gè)類(lèi)型和一個(gè)客戶(hù)ID。如果用數(shù)組的方式,這可能是:代碼如下:$data = array( 'url' => ' mynewclient ', 'name' => 'BigCo Inc', 'clientid' => '33', 'type' => 'dynamic' );把這些信息增加到sites表,我們使用:代碼如下:$

27、this->db->insert('sites', $data);或者,我們也可以使用$this->db->set()設(shè)置每一個(gè)值:代碼如下:$this->db->set('url',' mynewclinet ');$this->db->set('name','BigCo Inc');$this->db->set('clientid', '33');$this->db->set('type',&

28、#39;dynamic');$this->db->insert('sites');如果我們正在更新一條現(xiàn)有的記錄,我們也可以創(chuàng)建一個(gè)數(shù)組或使用$this->db->set(),但是現(xiàn)在有兩點(diǎn)不同。第一,我們必須定位我們想要更新的記錄;其次,我們需要使用$this->db->set(),如果我想要在sites表中更新一條記錄(針對(duì)“id”字段的值為1的那行記錄),使用數(shù)組的方式是這樣處理的:代碼如下:$this->db->where('id', '1');$this->db->up

29、date('sites', $data);你也可以使用$this->db->set()方式,就像前面做過(guò)的那樣。CI提供了幾個(gè)函數(shù)檢查數(shù)據(jù)庫(kù)是否成功執(zhí)行了相關(guān)操作。最有用的:代碼如下:$this->db->affected_rows(); 在執(zhí)行insert或update后應(yīng)該返回 '1'-但是如果我正在update一批記錄的話(huà),可能返回更大的一個(gè)整數(shù)。你已經(jīng)注意到當(dāng)我insert一筆新的記錄時(shí),我沒(méi)有設(shè)定ID這一列。這是因?yàn)镮D這列被設(shè)定為自動(dòng)插入類(lèi)型。但是當(dāng)我update一筆現(xiàn)有的記錄時(shí)候,我必須引用ID屬性,否則數(shù)據(jù)庫(kù)不知道該改變哪

30、一筆記錄。如果我正在insert一筆新的記錄, 在實(shí)際產(chǎn)生它之前,我們并不知道ID具體的值。如果我需要引用新的記錄的ID, 使用下列語(yǔ)句:$new_id_number = $this->db->insert_id(); (這一行代碼必須跟在insert語(yǔ)句之后,否則可能得到錯(cuò)誤的結(jié)果.)還有一點(diǎn)需要知道,CI的Active Record操作,包括$this->db->insert_id()和$this->db->update_id()會(huì)自己轉(zhuǎn)義。從 1.5 版,CI也包含了對(duì)事務(wù)的支持,即指定的一批SQL操作要么全成功,要么全失敗,換句話(huà)說(shuō),要么提交,要么回滾。這在復(fù)式記帳應(yīng)用和許多商業(yè)應(yīng)用中是很重要的。舉例來(lái)說(shuō),說(shuō)你正在賣(mài)電影票。你需要接受付款,同時(shí)分配座位。如果你的系統(tǒng)收費(fèi)成功但分配座位失敗,這個(gè)客戶(hù)肯定是要光火的。CI 現(xiàn)在也讓事務(wù)處理變得很簡(jiǎn)單,即要么“提交”,要么回滾。你可以參考用戶(hù)手冊(cè)以得到更多關(guān)于事務(wù)的信息。刪除操作刪除操作也許是最簡(jiǎn)單的。你只要定位好需要?jiǎng)h除記錄,比如我們要?jiǎng)h除ID為2的記錄:$this->db->where('id','2');$this->db->delete('sites');要小心

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論