久久福利_99r_国产日韩在线视频_直接看av的网站_中文欧美日韩_久久一

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Mysql入門系列:PHP基礎(chǔ)

瀏覽:15日期:2024-07-07 13:26:53

PHP 的基本功能就是解釋一個(gè)腳本,來(lái)生成發(fā)送到客戶機(jī)的Web 頁(yè)面。具有代表性的是,腳本包括逐字發(fā)送到客戶機(jī)的HTML 和作為程序執(zhí)行的PHP 代碼的混合編碼。無(wú)論代碼生成什么樣的輸出,都會(huì)發(fā)送到客戶機(jī),因此客戶機(jī)永遠(yuǎn)不會(huì)看到代碼,它只能看結(jié)果的輸出。;;;;當(dāng)PHP 開(kāi)始讀取文件時(shí),假設(shè)文件內(nèi)容表示文字的H T M L,則它僅僅拷貝在那里找到的輸出內(nèi)容。當(dāng)PHP 解釋程序遇到一個(gè)特殊的打開(kāi)標(biāo)記時(shí),就從HTML 模式切換到PHP 代碼模式,而作為要執(zhí)行的PHP 代碼也開(kāi)始解釋文件。代碼的結(jié)尾由另一個(gè)特殊的標(biāo)記指出,解釋程序在這個(gè)位置從代碼模式切換回HTML 模式。這就允許將靜態(tài)的文本( HTML 部分)與動(dòng)態(tài)產(chǎn)生的結(jié)果( PHP 代碼部分的輸出)相混合,產(chǎn)生依賴于調(diào)用環(huán)境變化的頁(yè)面。例如,可以使用PHP 腳本來(lái)處理表格的結(jié)果,在這個(gè)格式中,用戶已經(jīng)輸入了數(shù)據(jù)庫(kù)搜索的參數(shù)。由于格式填入內(nèi)容的不同,所以每次搜索的參數(shù)可能也不同,因此當(dāng)腳本執(zhí)行搜索的時(shí)候,每個(gè)作為結(jié)果的頁(yè)面將反映不同的搜索。;;;;讓我們通過(guò)一個(gè)非常簡(jiǎn)單的PHP 腳本看一看它是如何工作的:;;;;<HTML>;;;;<BODY>;;;;hello,world;;;;</body>;;;;</HTML>;;;;這個(gè)腳本并不很有趣,因?yàn)樗话≒HP 代碼!因此您會(huì)問(wèn):那它有什么好處?這個(gè)問(wèn)題的回答是:它有時(shí)有助于建立包括想要生成頁(yè)面的HTML 框架的腳本,然后再加入PHP代碼。這是非常有效的,PHP 解釋程序用于它是沒(méi)有問(wèn)題的。;;;;為了在腳本中包括PHP 代碼,您可從用兩個(gè)特殊標(biāo)記(腳本開(kāi)始處的‘ < ? p h p’和腳本結(jié)束處的‘? >’)把它與周圍的文本區(qū)分開(kāi)來(lái)。當(dāng)PHP 解釋程序遇到開(kāi)始的‘< ? p h p’標(biāo)記時(shí),就從HTML 模式切換到PHP 模式,并解釋它找到的任何PHP 代碼,直到看見(jiàn)結(jié)束的‘ ? >’標(biāo)記為止。它產(chǎn)生的所有輸出解釋并替換了兩個(gè)標(biāo)記之間的腳本。將前面的實(shí)例再重新編寫一下,它包括了少量的PHP 代碼,如下所示:Mysql入門系列:PHP基礎(chǔ);;;;此時(shí),代碼部分是很小的,由單行組成。當(dāng)解釋代碼時(shí),產(chǎn)生了輸出“ hello, world,它作為輸出部分發(fā)送到客戶機(jī)瀏覽器。這樣,這個(gè)腳本產(chǎn)生的Web 頁(yè)面與前面實(shí)例產(chǎn)生的Web頁(yè)面一樣,前面實(shí)例的腳本完全由HTML 組成。;;;;可以使用PHP 代碼產(chǎn)生Web 頁(yè)面的任何部分。我們已經(jīng)看到了一個(gè)特別的實(shí)例,在那里整個(gè)腳本都由文字的HTML 組成,而不包括PHP 代碼。另一個(gè)特別的實(shí)例是整個(gè)腳本都是PHP 代碼而不包括文字的H T M L:;;;;這說(shuō)明PHP 在如何產(chǎn)生輸出方面有很大的靈活性。但PHP 也留下一個(gè)問(wèn)題,那就是確定如何組合HTML 和PHP 代碼才是合適的。不必把所有代碼都放在一個(gè)地方, PHP 在這方面也很靈活。只要您高興,就可以通過(guò)腳本在HTML 和PHP 代碼模式之間進(jìn)行轉(zhuǎn)換。PHP 腳本標(biāo)記;;;;除了本章實(shí)例中使用的標(biāo)記之外, PHP還支持其他的腳本標(biāo)記。您可以在其他人編寫的PHP 代碼中看到它們,或者可以自己使用這些標(biāo)記。PHP 識(shí)別四種標(biāo)記風(fēng)格:;;;;缺省標(biāo)記風(fēng)格。這是PHP 配置為缺省時(shí)使用的風(fēng)格:;;;;<?php print ("hello,worldn");?>;;;;簡(jiǎn)潔開(kāi)標(biāo)記風(fēng)格。這個(gè)風(fēng)格除了開(kāi)標(biāo)記較簡(jiǎn)潔外,其他與缺省風(fēng)格相類似:;;;;<? print ("hello,worldn");?>;;;;兼容ASP 的風(fēng)格。這個(gè)風(fēng)格在Active Server Page 環(huán)境內(nèi)部是通用的:;;;;<% print ("hello,worldn");%>;;;;<SCRIPT> 標(biāo)記風(fēng)格。如果使用與其他標(biāo)記風(fēng)格不同的HTML 編輯器,這個(gè)風(fēng)格是有用的。當(dāng)然,它比較冗長(zhǎng),但是當(dāng)您使用其他標(biāo)記風(fēng)格時(shí),編輯器可能不處理PHP 代碼,這時(shí)您將發(fā)現(xiàn)它是必需的:;;;;<SCRIPT LANGUAGE="php">print ("hello,worldn");</SCRIPT>;;;;缺省時(shí),簡(jiǎn)潔開(kāi)標(biāo)記風(fēng)格和兼容ASP 風(fēng)格無(wú)效。請(qǐng)參閱附錄H 有關(guān)開(kāi)啟它們的說(shuō)明。獨(dú)立的PHP 腳本;;;;當(dāng)處理命令解釋程序腳本或Perl 腳本時(shí),可以編寫從命令行調(diào)用的獨(dú)立的PHP 腳本。這里有一個(gè)實(shí)例:;;;;#! /usr/local/bin/php -q;;;;<?php print ("hello,worldn");?>;;;;前面的腳本可命名為h e l l o . p h p,利用chmod +x 使之成為可執(zhí)行的,并從命令解釋程序中調(diào)用:;;;;% hello.php;;;;hello,world;;;;本章中我們不編寫任何獨(dú)立的腳本。這里編寫的所有實(shí)例都期望Web 服務(wù)器調(diào)用它們來(lái)生成Web 頁(yè)面。;;;;下一個(gè)腳本有一些實(shí)質(zhì)性的內(nèi)容,但仍然相當(dāng)簡(jiǎn)短。它說(shuō)明了如何較容易地從PHP 訪問(wèn)MySQL數(shù)據(jù)庫(kù),并在Web 頁(yè)面中使用查詢結(jié)果。此腳本在第5 章表達(dá)得很簡(jiǎn)短,它形成了歷史同盟Web 站點(diǎn)主頁(yè)的基礎(chǔ)。在我們繼續(xù)往下做的時(shí)候,應(yīng)該使腳本更精巧一些,但直到現(xiàn)在為止,它所做的只是顯示簡(jiǎn)短的歡迎消息和當(dāng)前同盟會(huì)員資格的計(jì)數(shù):;;;;歡迎消息就是一個(gè)靜態(tài)文本,因此它作為文字的HTML 是最容易編寫的。另一方面,會(huì)員資格的計(jì)算是動(dòng)態(tài)的,而且隨時(shí)會(huì)更改,因此必須在它不工作時(shí)通過(guò)查詢samp_db 數(shù)據(jù)庫(kù)中的member 表來(lái)確定。;;;;在開(kāi)和閉腳本標(biāo)記之間的代碼文本執(zhí)行一個(gè)簡(jiǎn)單的任務(wù)。首先,它打開(kāi)了與MySQL服務(wù)器的連接,并使samp_db 數(shù)據(jù)庫(kù)成為缺省數(shù)據(jù)庫(kù)。然后,它發(fā)送一個(gè)到服務(wù)器的查詢來(lái)確定此刻歷史同盟有多少成員(我們將它作為member 表中的行數(shù))。查詢結(jié)果將作為包括會(huì)員資格計(jì)數(shù)消息的一部分顯示出來(lái),然后再做處理。;;;;在處理過(guò)程中,如果任何一點(diǎn)發(fā)生錯(cuò)誤,該腳本都會(huì)簡(jiǎn)單地退出。它由于太簡(jiǎn)單而不產(chǎn)生錯(cuò)誤輸出,因此把訪問(wèn)該Web 站點(diǎn)的人們搞糊涂了(如果依靠PHP 代碼生成整個(gè)Web 頁(yè)面,當(dāng)因錯(cuò)誤而退出,且不產(chǎn)生任何輸出時(shí),可能會(huì)使訪問(wèn)頁(yè)面的人非常惱火,因?yàn)橛行g覽器將顯示“這個(gè)頁(yè)面沒(méi)有數(shù)據(jù)的對(duì)話框)。;;;;讓我們把該腳本分成幾段,看看它是如何工作的。第一步是用mysql_pconnect() 連接到服務(wù)器:;;;;上一篇; ; ; 目錄; ; ; 下一篇=@mysql_pconnect ("pit.viper.snake.net","paul","secret");;;;or exit ();;;;;mysql_pconnect() 把主機(jī)名、用戶名和口令作為參數(shù)。連接建立成功,則返回連接標(biāo)識(shí)符,如果發(fā)生錯(cuò)誤,則返回FA L S E。如果連接失敗,腳本立刻調(diào)用exit() 來(lái)結(jié)束腳本,并且不再產(chǎn)生輸出。;;;;在mysql_pconnect() 調(diào)用前的‘@’字符是什么意思呢?就是“請(qǐng)關(guān)閉的意思。有些PHP 函數(shù)在失敗時(shí)除了返回狀態(tài)代碼之外還寫出錯(cuò)誤消息。在mysql_pconnect() 情況下,失敗的連接導(dǎo)致了下面的消息出現(xiàn)在發(fā)送到客戶機(jī)瀏覽器的Web 頁(yè)面上:;;;;Warning:MySQLConnection Failed:Access denied for user:;;;;'paul0pit-viper.snake.net' (Using password:YES);;;;這樣很難看,參觀我們站點(diǎn)的人們可能不知道它是如何造成的和該怎樣處理它。把‘ @’字符放到mysql_pconnect() 調(diào)用的前面,就可以取消這個(gè)錯(cuò)誤消息,以使我們能在返回值的基礎(chǔ)上自己選擇如何處理錯(cuò)誤。對(duì)于該腳本,如果發(fā)生錯(cuò)誤,最好根本不產(chǎn)生屬于會(huì)員資格計(jì)數(shù)的輸出。這樣,頁(yè)面將只包含歡迎消息。;;;;任何PHP 函數(shù)都可以使用‘@’,但以筆者的經(jīng)驗(yàn)來(lái)說(shuō),初始的mysql_pconnect() 調(diào)用是最可能失敗的一個(gè)。因此,本章的例子禁止來(lái)自該函數(shù)中的消息。;;;;將名稱和口令嵌入到所有人都能看到的腳本中,可能會(huì)使您緊張不安。是這樣的,名稱和口令出現(xiàn)在發(fā)送到客戶機(jī)的Web 頁(yè)面上是對(duì)的,因?yàn)樵撃_本的內(nèi)容由其輸出的結(jié)果替換掉了。然而,如果Web 服務(wù)器不知何故配置不當(dāng),沒(méi)有識(shí)別出腳本需要由PHP 代碼來(lái)處理,它就會(huì)將腳本以純文本發(fā)送出去,且會(huì)暴露連接參數(shù)。在8 . 2 . 1節(jié)“使用函數(shù)和include 文件中,將簡(jiǎn)要地處理這類情況。;;;;mysql_pconnect() 返回的連接標(biāo)識(shí)符可以傳遞到PHP API 中的幾個(gè)與MySQL相關(guān)的調(diào)用中。然而,對(duì)于這樣的調(diào)用,標(biāo)識(shí)符總是可選擇的。例如,可以使用下列格式之一來(lái)調(diào)用mysql_ s e l e c t _ db ( ):;;;;mysql_select_db ($db_name,上一篇; ; ; 目錄; ; ; 下一篇);;;;;mysql_select_db ($db_name);;;;;mysql_pconnect() 與mysql_connect() 的對(duì)比函數(shù)mysql_pconnect() 與函數(shù)mysql_connect() 相似,都具有主機(jī)名、用戶名和口令參數(shù),并返回連接標(biāo)識(shí)符或FALSE 來(lái)說(shuō)明連接是否成功。兩個(gè)調(diào)用之間的不同在于:mysql_pconnect() 建立了一個(gè)持久的連接,而mysql_connect() 建立了一個(gè)非持久的連接。與非持久連接不同,持久連接在腳本終止時(shí)不關(guān)閉。如果另外一個(gè)PHP 腳本隨后由同一個(gè)Apache 子處理執(zhí)行,并用同樣的參數(shù)調(diào)用mysql_ p c o n n e c t ( ),將重新使用這個(gè)連接。這比關(guān)閉后再建立連接的效率要高。;;;;如果忽略了從一些相關(guān)MySQL的PHP 調(diào)用中得到的連接參數(shù),調(diào)用就會(huì)使用最近打開(kāi)的連接。這樣,如果腳本只打開(kāi)單個(gè)連接,那么在任何MySQL調(diào)用中永遠(yuǎn)不必指定連接參數(shù)——即連接是缺省的。這就是C 或DBI API 與MySQL程序設(shè)計(jì)的極大不同之處,因?yàn)樗鼈儧](méi)有這樣的缺省。;;;;筆者使用上一篇; ; ; 目錄; ; ; 下一篇 變量在簡(jiǎn)單的主頁(yè)上編寫了下面的連接代碼,使mysql_pconnect() 返回哪種類型的值更加清晰:;;;;上一篇; ; ; 目錄; ; ; 下一篇=@mysql_pconnect("pit-viper.snake.net","paul","secret");;;;or exit();;;;;然而,實(shí)際上,我們?cè)谀_本的其他地方都沒(méi)有使用$ l i n k,因此代碼可更簡(jiǎn)單地寫成:;;;;@mysql_pconnect("pit.viper.snake.net","paul","secret");;;;or exit();;;;;假設(shè)連接建立成功,則下一步是選擇一個(gè)數(shù)據(jù)庫(kù):;;;;mysql_select_db("samp_db");;;;or exit();;;;;如果mysql_select_db 失敗,我們將會(huì)默默地退出。如果我們能夠連接到服務(wù)器,并且數(shù)據(jù)庫(kù)存在,那么似乎不可能發(fā)生錯(cuò)誤,但是仍然要嚴(yán)格地檢查問(wèn)題并采取相應(yīng)的行動(dòng)。選擇數(shù)據(jù)庫(kù)之后,可將查詢發(fā)送到服務(wù)器,提取結(jié)果,加以顯示,然后釋放結(jié)果集:;;;;$result=mysql_query("SELECT COUNT(*) FROM member;;;;or exit();;;;;if ($row = mysql_fetch_array ($result))echo "<p>The League currently has ". $row[0] . "members";;;;;mysql_free_result($result);;;;;mysql_query() 函數(shù)將查詢發(fā)送到服務(wù)器中去執(zhí)行。查詢不用分號(hào)或者‘ g’終止。如果查詢非法或因?yàn)槟承┰虿荒軋?zhí)行,則mysql_query() 返回FA L S E,否則返回一個(gè)結(jié)果集標(biāo)識(shí)符。該標(biāo)識(shí)符是我們能用來(lái)獲得有關(guān)結(jié)果集信息的值。對(duì)于查詢,該結(jié)果集由表示會(huì)員資格計(jì)數(shù)的單列值的單行組成。為得到這個(gè)值,我們可以把結(jié)果集標(biāo)識(shí)符傳給mysql_ f e t c h _ r o w ( )來(lái)獲取行,將此行賦給變量$ r o w,并以$row[0] 形式訪問(wèn)第一個(gè)元素(只有一個(gè)元素時(shí)也是這樣)。;;;;當(dāng)處理完結(jié)果集時(shí),將結(jié)果集傳遞給mysql_free_result() 進(jìn)行釋放。實(shí)際上這種調(diào)用在我們的腳本中是不必要的,因?yàn)楫?dāng)腳本結(jié)束時(shí), PHP 會(huì)自動(dòng)地釋放所有活動(dòng)的結(jié)果集。;;;;mysql_free_result() 有助于執(zhí)行大型查詢或大量查詢的腳本。它防止大量?jī)?nèi)存的使用。;;;;為了使用腳本,需要在某處安裝它。本章將采用這樣的約定:美國(guó)歷史同盟在Apache 文檔樹(shù)的最高一級(jí)中有自己的目錄,稱為us h l,因此主頁(yè)面腳本作為該樹(shù)的ushl/index.php 進(jìn)行安裝。我們也將為學(xué)分保存方案開(kāi)發(fā)腳本,因此給出目錄g p。如果Web 站點(diǎn)主機(jī)是pit-viper.snake.net,那么這兩個(gè)目錄中的頁(yè)面將有如下開(kāi)頭的URL:;;;;http://pit-viper.snake.net/ushl/;;;;http://pit-viper.snake.net/gp/;;;;例如,每個(gè)目錄的主頁(yè)面都可稱為i n d e x . p h p,并以如下方式進(jìn)行訪問(wèn):;;;;http://pit-viper.snake.net/ushl/index.php;;;;http://pit-viper.snake.net/gp/index.php使用函數(shù)和include 文件;;;;PHP 腳本與DBI 腳本的不同之處在于, PHP 腳本位于Web 服務(wù)器文檔樹(shù)的內(nèi)部,而DBI 腳本位于cgi-bin 目錄中,這個(gè)目錄在文檔樹(shù)的外部。這就提出了一個(gè)安全性問(wèn)題:服務(wù)器配置不當(dāng)?shù)腻e(cuò)誤可能導(dǎo)致位于文檔樹(shù)內(nèi)部的頁(yè)面會(huì)以純文本方式泄露給客戶機(jī)。這意味著建立與MySQL服務(wù)器連接的用戶名和口令如果在PHP 腳本而非DBI 腳本中使用,則將處于暴露給外界的很高的危險(xiǎn)之中。;;;;PHP 中的變量;;;;在PHP中,可以通過(guò)簡(jiǎn)單地使用變量而使它們存在。主頁(yè)腳本使用了三個(gè)變量:$ l i n k、$result 和$ r o w,沒(méi)有一個(gè)變量會(huì)在所有地方都聲明(聲明變量的地方有上下文,如在函數(shù)內(nèi)部引用全局變量時(shí),我們隨后會(huì)談到這個(gè)問(wèn)題)。;;;;變量由美元符號(hào)(‘$’)為開(kāi)頭的標(biāo)識(shí)符表示。無(wú)論它表示什么類型的值都是正確的,盡管對(duì)于數(shù)組和對(duì)象要添加一些額外內(nèi)容來(lái)訪問(wèn)值的單個(gè)元素。如果變量$x 表示單個(gè)值,例如,數(shù)字或字符串,則可以寫成$x 來(lái)訪問(wèn)它。如果$x 表示有數(shù)字索引的數(shù)組,則可以寫成$ x [ 0 ]、$x[1] 等等來(lái)訪問(wèn)它的元素。如果$x 表示有關(guān)聯(lián)索引的數(shù)組,如“ y e l l o w或者“l a rg e,則可以寫成$ x [“y e l l o w]、$ x [“l a rg e] 來(lái)訪問(wèn)它的元素。;;;;PHP 數(shù)組可以同時(shí)擁有數(shù)字索引的元素和相關(guān)索引的元素。例如, $x[1] 和 $ x [“ l a rg e] 都能作為同一數(shù)組的元素。如果$x 代表一個(gè)對(duì)象,則可寫成$ x ->property_name 來(lái)訪問(wèn)它所具有的屬性。例如, $x->yellow 和$ x - > l a rge 都是$x 的屬性。作為屬性名,數(shù)字是不合法的,因此$x->1在PHP 中是不合法的。;;;;初始的歷史同盟主頁(yè)腳本也存在這個(gè)問(wèn)題,因?yàn)樗∕ySQL用戶名和口令的直接值。讓我們用兩個(gè)PHP 性能:函數(shù)和include 文件,把這些連接參數(shù)移到腳本外面。我們將編寫函數(shù)samp_db _ c o n n e c t ( )來(lái)建立這個(gè)連接,并把函數(shù)放到一個(gè)include 文件中—不是主腳本部分的,但可以從腳本中引用的文件。這種方法的優(yōu)點(diǎn)如下:;;;;編寫連接建立代碼比較容易。不需要寫出所有參數(shù),就可以在連接后用samp_db _connect() 選擇數(shù)據(jù)庫(kù),使一個(gè)函數(shù)可以進(jìn)行兩個(gè)PHP 函數(shù)的工作。由于你可以將精力集中于腳本的獨(dú)特標(biāo)記,而不必為連接建立代碼分心,因此也使得腳本更加易于理解。;;;;可從腳本中訪問(wèn)include 文件,但可移到Apache 文檔樹(shù)的外面。這使它的內(nèi)容對(duì)于客戶機(jī)來(lái)說(shuō)是不可訪問(wèn)的,即使Web 服務(wù)器配置不當(dāng),連接參數(shù)也不會(huì)暴露給它們。使用include 文件,對(duì)于隱藏不想由Web 服務(wù)器發(fā)送到站點(diǎn)的任何類型的敏感信息都是個(gè)良策。;;;;雖然如此,但這并不意味著用戶名和口令在任何意義上說(shuō)都是安全的。如果沒(méi)有采取預(yù)防措施,在Web 服務(wù)器主機(jī)上注冊(cè)的用戶,能夠直接讀取include 文件。請(qǐng)參閱7 . 4 . 3節(jié)“從Web 腳本連接到MySQL服務(wù)器關(guān)于安裝DBI 配置文件所描述的預(yù)防措施,它們用于保護(hù)口令和用戶名不受其他用戶侵害。對(duì)PHP 的include 文件也要應(yīng)用同樣的防范措施。;;;;PHP 語(yǔ)言上的影響;;;;如果有C 程序設(shè)計(jì)經(jīng)驗(yàn),則可能注意到:腳本中許多語(yǔ)法的結(jié)構(gòu)與C 程序設(shè)計(jì)中的非常類似。實(shí)際上, PHP 語(yǔ)法很大程度上來(lái)自于C,因此這種相似處并不是巧合。如果有些C 的背景知識(shí),就可以將它的許多內(nèi)容轉(zhuǎn)換到PHP。事實(shí)上,如果不能確信如何用PHP 編寫表達(dá)式或控制結(jié)構(gòu),則可以試用C 中編寫它們的方法,這很可能也是正確的。雖然PHP 的基本部分主要在C 中,但也包含了使用Java 和Perl 的成分??梢栽谧⑨屨Z(yǔ)法中查看它,在那里允許以下形式:;;;;# Perl-style comment from '#' to end of line;;;;//c++ or Java-style comment from '//' to end of line;;;;//* C-style comment between slash-star to star-slash */;;;;Perl 的其他相似性包括‘ .’字符串連接操作符(包括‘ . =’作為額外的連接),變量引用和轉(zhuǎn)義序列的方法是在雙引號(hào)內(nèi)而非單引號(hào)內(nèi)解釋的。;;;;include 文件可以由多個(gè)腳本使用。這提高了代碼的可重用性,使代碼更加可維護(hù)。同時(shí)也允許對(duì)訪問(wèn)這個(gè)文件的每個(gè)腳本不費(fèi)力地做出全局性的更改。例如,如果我們將數(shù)據(jù)庫(kù)samp_db 從pit-viper 移動(dòng)到b o a,則不必更改一簇單個(gè)腳本,而只要更改包含samp_db_connect() 函數(shù)的include 文件中mysql_pconnect() 調(diào)用的主機(jī)名參數(shù)即可。;;;;為了使用include 文件,必須有存放它們的地方,而且必須使PHP 找到它們。如果系統(tǒng)已經(jīng)有了這樣一個(gè)位置,則可以使用。如果沒(méi)有,則使用下面的過(guò)程建立一個(gè)include 文件的位置:;;;;1) 創(chuàng)建一個(gè)目錄來(lái)存放PHP 的include 文件。該目錄不能位于Web 服務(wù)器文檔樹(shù)內(nèi)部!筆者使用/usr/local/apache/php 的PHP include 目錄,它與我的文檔樹(shù)在同一層次上(/ us r / l o c a l / a p a c h e / h t d o c s),而不是在其內(nèi)部。;;;;2) 通過(guò)完整的路徑名或者告訴PHP 在搜索時(shí)尋找哪個(gè)目錄來(lái)引用include 文件。后者的方法更方便些,因?yàn)槿绻覀兪褂昧宋募幕?PHP 就會(huì)找到它( PHP include 文件與C頭文件有些類似,其中包括的PHP 將在多個(gè)目錄中搜尋include 文件,就像C 預(yù)處理程序在多個(gè)目錄中搜尋C 頭文件一樣)。為了告訴PHP 去哪里查看,修改PHP 初始化文件(系統(tǒng)上的/ us r / l o c a l / l i b / p h p 3 . i n i)來(lái)改變include_path 的值。如果它沒(méi)有值,可以將它設(shè)置為新的包含路徑的完整路徑名:;;;;include_path="current_value:/usr/local/apache/php";;;;如果include_path 已經(jīng)有值了,則把新的目錄加到那個(gè)值中:;;;;include_path="current_value:/usr/local/apache/php";;;;3) 創(chuàng)建想使用的include 文件并將它放到i n c l ud e目錄中。文件應(yīng)該有一些有特點(diǎn)的名稱,為了這個(gè)目的,這里我們使用samp_db . i n c。它的內(nèi)容將在下面列出。對(duì)于我們這里開(kāi)發(fā)的腳本,當(dāng)連接到MySQL服務(wù)器上時(shí),會(huì)一直使用samp_db 數(shù)據(jù)庫(kù),因此連接函數(shù)samp_db_connect() 也可以為我們選擇samp_db 數(shù)據(jù)庫(kù)。如果連接成功并選擇了這個(gè)數(shù)據(jù)庫(kù),這個(gè)函數(shù)就返回一個(gè)連接標(biāo)識(shí)符;如果發(fā)生錯(cuò)誤,則返回FA L S E。發(fā)生錯(cuò)誤時(shí)將不打印消息,并且允許調(diào)用者靜靜地退出,或者在環(huán)境允許時(shí)再打印消息。;;;;觀察一下,samp_db.inc 文件的內(nèi)容由‘< ? p h p’和‘? >’括在一起。這是因?yàn)镻HP 是在HTML 模式中開(kāi)始讀取文件的。如果沒(méi)有這些標(biāo)記PHP 會(huì)把文件以純文本發(fā)送出去,而不是作為PHP 代碼解釋。如果想在文件中包含文字的HTML 是很好的選擇。但是,如果文件包含PHP 代碼,就必須在腳本標(biāo)記內(nèi)部封閉代碼。;;;;4) 使用下面的行從腳本中引用文件:;;;;include("samp_db.inc");;;;;當(dāng)PHP 看到這一行時(shí),就搜尋文件并讀取內(nèi)容。對(duì)于腳本的下列部分,文件中的任何事物都變成可訪問(wèn)的。;;;;在建立了我們的include 文件samp_db.inc 之后,就可以修改歷史同盟主頁(yè)來(lái)引用i n c l ud e文件,并通過(guò)調(diào)用samp_db_connect() 函數(shù)連接到MySQL服務(wù)器上:;;;;include( ) 與require( ) 的對(duì)比;;;;PHP 的require() 性能與include() 相類似。不同之處在于,對(duì)include() 來(lái)說(shuō),在include() 執(zhí)行時(shí)文件每次都要進(jìn)行讀取和評(píng)估;而對(duì)于require() 來(lái)說(shuō),文件只處理一次(實(shí)際上,文件內(nèi)容替換了require() 語(yǔ)句)。這意味著如果有包含這些指令之一的代碼和可能執(zhí)行多次的代碼,則使用require() 的效率比較高。另一方面,如果每次執(zhí)行代碼時(shí)想讀取不同的文件,或者有通過(guò)一組文件迭代的循環(huán),就使用i n c l ud e ( ),因?yàn)榭梢越o想要包括的文件名設(shè)置一個(gè)變量,當(dāng)參數(shù)為include() 時(shí)使用這個(gè)變量。;;;;samp_db.inc 文件對(duì)其他函數(shù)也是有用的,我們可以將它作為各種其他事物的儲(chǔ)藏庫(kù)。實(shí)際上,還可以再創(chuàng)建兩個(gè)函數(shù)放入到文件中。我們編寫的每個(gè)腳本在頁(yè)面的開(kāi)頭都會(huì)產(chǎn)生一組相當(dāng)醒目的HTML 標(biāo)記,而另一組在結(jié)尾。不必在每個(gè)腳本中將它們逐字地寫出,我們可以通過(guò)編寫函數(shù)html_begin() 和html_end() 來(lái)做這些事。函數(shù)html_begin() 能夠提取幾個(gè)指定了頁(yè)面標(biāo)題和頭的參數(shù)。兩個(gè)函數(shù)的代碼如下:;;;;然后我們可以修改歷史同盟主頁(yè)來(lái)使用這兩個(gè)新函數(shù),如下所示:;;;;請(qǐng)注意代碼被分成了兩塊,兩塊代碼之間出現(xiàn)了歡迎消息的文字HTML 文本。;;;;產(chǎn)生頁(yè)面開(kāi)始和最后部分的函數(shù)用法給了我們一個(gè)重要的能力。如果想改變使用這些函數(shù)的頁(yè)面頭和尾的外觀,可以在函數(shù)中包含一些代碼。使用它們的每個(gè)腳本也都將自動(dòng)地受到影響。例如,您可以把消息“ Copyright USHL放在每個(gè)歷史同盟頁(yè)面的底部。頁(yè)面尾部函數(shù)html_end() 會(huì)很容易地做到這一點(diǎn)。一個(gè)簡(jiǎn)單的查詢頁(yè)面;;;;已經(jīng)嵌入到歷史同盟主頁(yè)中的腳本運(yùn)行了一個(gè)只返回單個(gè)行的查詢。下一個(gè)腳本介紹了如何處理多行的結(jié)果集。它獲取并顯示了member 表中的內(nèi)容。這就是第7 章開(kāi)發(fā)的dump_members DBI 腳本的PHP 等價(jià)物,因此稱它為d um p _ member s . p h p。它與DBI 版本的不同之處在于,它希望在Web 環(huán)境中使用而不是在命令行中使用。由于這個(gè)原因,它需要產(chǎn)生HTML 輸出而不是簡(jiǎn)單地寫出制表符分隔的文本。為了使行和列漂亮地排列,我們將以HTML 表形式編寫會(huì)員資格記錄。腳本如下:;;;;這個(gè)腳本使用了die() 函數(shù)來(lái)打印消息,如果發(fā)生錯(cuò)誤則退出( die() 函數(shù)與exit() 函數(shù)相類似,但是它在退出之前打印消息)。與我們?cè)跉v史同盟主頁(yè)中使用的靜靜地退出方法相比,這是一種不同的錯(cuò)誤處理方法。在dump_membes.php 中,我們希望看到一個(gè)特殊的結(jié)果,因此打印錯(cuò)誤消息來(lái)說(shuō)明發(fā)生的問(wèn)題是有道理的。;;;;腳本可以安裝在ushl 目錄并用http://pit-viper.snake.net/ushl/dump_members.php 訪問(wèn)??梢栽跉v史同盟主頁(yè)的新腳本中增加一個(gè)連接,以便人們了解它:處理查詢結(jié)果;;;;在這一節(jié)中,我們將更細(xì)致地檢查如何執(zhí)行MySQL查詢并處理結(jié)果集。在PHP 中,所有的查詢都通過(guò)調(diào)用mysql_query() 函數(shù)來(lái)發(fā)布,這個(gè)函數(shù)提取查詢字符串和連接標(biāo)識(shí)符作為參數(shù)。連接標(biāo)識(shí)符是可選的,因此可以用下面任意一種形式調(diào)用mysql_query():;;;;$result=mysql_query($query,上一篇; ; ; 目錄; ; ; 下一篇); # use explicit connection;;;;$result=mysql_query($query); # use default connection;;;;對(duì)于不返回行的查詢(非SELECT 的查詢,如D E L E T E、INSERT、REPLACE 和UPDATE),mysql_query() 返回TRUE 或者FALSE 說(shuō)明查詢成功或者失敗。為了獲得成功的查詢,可以調(diào)用mysql_ a ffected_rows() 找出有多少行被改變(可能是刪除、插入、替換或者更新)。;;;;對(duì)于SELECT 語(yǔ)句,mysql_query() 返回結(jié)果集標(biāo)識(shí)符或者FALSE 說(shuō)明查詢是成功或是失敗。為了獲得成功的查詢,使用結(jié)果集標(biāo)識(shí)符可以獲得更多的有關(guān)結(jié)果集的信息。例如,可以找出結(jié)果集有多少行或列,或者提取這個(gè)結(jié)果集內(nèi)部包括的行。;;;;當(dāng)mysql_query() 返回FA L S E(也就是零)時(shí),意味著查詢失敗—換句話說(shuō)就是發(fā)生一些錯(cuò)誤而不能執(zhí)行查詢。查詢失敗可能有下面幾個(gè)原因:;;;;查詢可能是畸形的并包含語(yǔ)法錯(cuò)誤。;;;;查詢依照語(yǔ)法可能是正確的,但是在語(yǔ)義上卻是無(wú)意義的,例如要從不包含列的表中選擇列時(shí)。;;;;沒(méi)有充分的權(quán)利執(zhí)行查詢。;;;;由于網(wǎng)絡(luò)問(wèn)題,可能已經(jīng)連接不到MySQL服務(wù)器主機(jī)。;;;;在以上每種情況中(還有其他情況),mysql_query() 都返回FA L S E。如果要想知道錯(cuò)誤的詳細(xì)原因,就調(diào)用mysql_error() 或者mysql_errno() 獲得錯(cuò)誤消息字符串或者數(shù)字錯(cuò)誤代碼(請(qǐng)參閱8 . 2 . 4節(jié)“處理錯(cuò)誤一節(jié))。;;;;考慮mysql_query() 造成的兩種最常見(jiàn)的錯(cuò)誤,返回值是行計(jì)數(shù),或者它包含查詢返回的數(shù)據(jù),兩者都是錯(cuò)誤的。;;;;1. 處理不返回結(jié)果集的查詢;;;;下面的代碼使用DELETE 說(shuō)明了如何處理不返回任何行的查詢:;;;;$result=mysql_query("DELETE FROM member WHERE member_id=149");;;;;if (!$result)print ("query failedn");;;;;elseprintf("number of rows deleted:%dn",mysql_affected_rows());;;;;如果有一個(gè)ID 號(hào)為149 的成員,MySQL就刪除記錄,且mysql_query() 返回T R U E。如果沒(méi)有這樣的成員呢?這種情況下mysql_query() 仍然返回T R U E!這使將精力耗在誤解mysql_query() 的返回值是行計(jì)數(shù)的人們非常驚訝。兩種情況都返回T R U E,是因?yàn)椴还軐?shí)際上是否刪除了一些行,查詢都是合法的。由查詢作用的行的數(shù)目則是完全不同的事。若要在查詢成功之后提取值,可調(diào)用mysql_ a ff e c t e d _ r o w s ( )。;;;;2. 處理返回結(jié)果集的查詢;;;;下面的實(shí)例提供了SELECT 查詢處理的大致概況:;;;;不要假設(shè)mysql_query() 會(huì)成功;;;;在PHP 郵件發(fā)送清單中,新的PHP 用戶會(huì)共同詢問(wèn):執(zhí)行腳本時(shí)為什么會(huì)發(fā)生下面的錯(cuò)誤消息:;;;;Warning:0 is not a MySQLresult index in file on line n;;;;這個(gè)消息將為零的結(jié)果集標(biāo)識(shí)符的值傳遞給了期望有效結(jié)果集的一些函數(shù)(如提取行的函數(shù))。這意味著早時(shí)的mysql_query() 調(diào)用返回了零值—就是FA L S E。換句話說(shuō)就是mysql_query() 失敗,并且在由其他函數(shù)使用它之前,腳本編寫程序?qū)z查返回值并不煩惱。在使用mysql_query() 時(shí),要一直檢測(cè)返回值。;;;;如果查詢失敗,結(jié)果將為FA L S E,對(duì)這個(gè)結(jié)果我們只是打印一條消息(取決于環(huán)境,其他對(duì)錯(cuò)誤的反應(yīng)可能更合適)。如果查詢成功,則mysql_query() 返回結(jié)果集標(biāo)識(shí)符。這個(gè)返回值在許多方法中是有用的(但不是作為行計(jì)數(shù)?。?。結(jié)果集標(biāo)識(shí)符可用于下列目標(biāo):;;;;將它傳遞給mysql_ n um _ r o w s ( ),來(lái)確定結(jié)果集中的行數(shù)。;;;;將它傳遞給mysql_ n um _ f i e l d s ( ),來(lái)確定結(jié)果集中的列數(shù)。;;;;將它傳遞給提取行的例程,來(lái)提取結(jié)果集的連續(xù)行。這個(gè)實(shí)例使用了mysql_ f e t c h _r o w ( ),但是還有其他的選擇,我們馬上就會(huì)看到它們。;;;;將它傳遞給mysql_ f r e e _ r e s ul t ( ),來(lái)釋放結(jié)果集并允許PHP 處理一些與之相關(guān)的源文件。;;;;在mysql_query() 成功地執(zhí)行S E L E C T查詢之后(請(qǐng)參見(jiàn)表8 - 1),PHP 為檢索結(jié)果集提供了幾個(gè)提取行的函數(shù)。當(dāng)不再有行時(shí),每個(gè)函數(shù)都得到一個(gè)結(jié)果集標(biāo)識(shí)符作為參數(shù)并返回FA L S E。表8-1PHP 行提取函數(shù)

函數(shù)名 返回值mysql_ f e t c h _ r o w ( ) 一個(gè)數(shù)組,由數(shù)字索引訪問(wèn)其元素mysql_ f e t c h _ a r r a y ( ) 一個(gè)數(shù)組,由數(shù)字索引或相關(guān)索引訪問(wèn)其元素mysql_ f e t c h _ o b j e c t ( ) 一個(gè)對(duì)象,作為屬性訪問(wèn)其元素

最基本的調(diào)用是mysql_ f e t c h _ r o w ( ),它返回結(jié)果集的下一行作為一個(gè)數(shù)組。數(shù)組的元素通過(guò)從0 到mysql_ n um _ f i e l d s ( )-1范圍內(nèi)的數(shù)字索引訪問(wèn)。下面的實(shí)例說(shuō)明了如何在每一行都提取和打印值的簡(jiǎn)單循環(huán)中使用mysql_ f e t c h _ r o w ( ):;;;;變量$row 是一個(gè)數(shù)組??捎?row[$i] 訪問(wèn)它, $ i在這里是數(shù)字列索引。如果熟悉PHP count() 函數(shù),可以試著用它而不要用mysql_num_fields() 來(lái)確定每一行的列數(shù)。count() 只計(jì)算這個(gè)數(shù)組中已設(shè)置值的元素的數(shù)量, PHP 不是與NULL 列值相對(duì)應(yīng)的元素設(shè)置值。count ( ) 對(duì)返回列數(shù)的度量是不可靠的,因?yàn)槟遣皇撬胍摹K€用于另外兩種提取行的函數(shù)。 ;;;;第二個(gè)提取行的函數(shù)mysql_fetch_array() 在表8 - 1中列出,它與mysql_fetch_row() 相類似,但是由數(shù)字索引和相關(guān)索引返回的數(shù)組元素都是可靠的。換句話說(shuō),可以通過(guò)數(shù)字或名稱訪問(wèn)元素:;;;;由mysql_fetch_array() 返回的信息是mysql_fetch_row() 返回的信息的擴(kuò)展集。除此之外,兩個(gè)函數(shù)之間的不同性能是可以忽略不記的,調(diào)用mysql_ f e t c h _ a r r a y ( )可以無(wú)特殊性能損耗。;;;;第三個(gè)提取行的函數(shù)mysql_ f e t c h _ o b j e c t ( ),返回結(jié)果集的下一行作為對(duì)象,這意味著用$row->col_name 語(yǔ)法訪問(wèn)行的元素。例如,如果從President 表中檢索last_name 和first_name 值,可以用$row->last_name 和$row->first_name 訪問(wèn)那些列:;;;;在查詢結(jié)果中測(cè)試NULL 值;;;;可以使用isset() 函數(shù)測(cè)試SELECT 查詢返回的列值是否為NULL。例如,如果行包含在$row 數(shù)組中,那么如果$row[$i] 對(duì)應(yīng)于NULL 值,則isset($row[$i]) 就為FA L S E,如果$row[$i] 為非NULL 值,則isset($row[$i]) 就為T R U E。相關(guān)的函數(shù)是e m p t y ( ),但是對(duì)于NULL 和空字符串,empty() 返回的結(jié)果都是一樣的,因此作為NULL 值測(cè)試而言,這個(gè)函數(shù)是無(wú)用的。;;;;如果查詢包括計(jì)算的列怎么辦?例如,發(fā)布一個(gè)作為表達(dá)式結(jié)果計(jì)算的返回值的查詢:;;;;SELECT CONCAT(first_name," ",lsat_last_name)FROM president;;;;這樣編寫的查詢不適于使用mysql_ f e t c h _ o b j e c t ( )。選擇的列名本身就是表達(dá)式,它不是合法的屬性名。然而,可以通過(guò)給列賦予一個(gè)別名來(lái)提供合法的名稱。下面的查詢將列的別名命名為f ul l _ name,如果用mysql_fetch_object() 提取結(jié)果,就允許它以$row->full_name 形式來(lái)訪問(wèn):;;;;SELECT CONCAT(first_name," ",lsat_last_name) AS full_name FROM president處理錯(cuò)誤;;;;PHP提供了三種處理錯(cuò)誤的方法:;;;;■ 用‘@’取消錯(cuò)誤消息??梢詫?duì)一些顯示消息的函數(shù)使用‘ @’。當(dāng)我們調(diào)用mysql_pconnect() 阻止來(lái)自于函數(shù)的錯(cuò)誤消息不在發(fā)送到客戶機(jī)的頁(yè)面上出現(xiàn)時(shí),就已經(jīng)在做這一點(diǎn)了。;;;;使用error_reporting() 函數(shù)。這個(gè)函數(shù)按下列級(jí)別將錯(cuò)誤報(bào)告打開(kāi)或者關(guān)閉:

錯(cuò)誤級(jí)別 錯(cuò)誤報(bào)告類型1 正常函數(shù)錯(cuò)誤2 正常警告4 分析程序錯(cuò)誤8 請(qǐng)注意

為了控制錯(cuò)誤報(bào)告,可調(diào)用error_reporting() 函數(shù),且參數(shù)為想要激活的級(jí)別的總和。關(guān)閉級(jí)別1和級(jí)別2警告應(yīng)該完全能夠取消來(lái)源于MySQL的消息:;;;;error_reporting(4+8);;;;;你可能不想關(guān)閉有關(guān)分析錯(cuò)誤的級(jí)別4警告,如果關(guān)掉了,可能要有一段艱難的時(shí)間用來(lái)調(diào)試它對(duì)腳本造成的改動(dòng)!級(jí)別8警告常常被忽略,但有時(shí)它指出腳本中應(yīng)該注意的問(wèn)題,因此您可能也想把它激活。還有16和3 2錯(cuò)誤級(jí)別,它們都來(lái)自于PHP 核心發(fā)動(dòng)機(jī),而非函數(shù),因此通常情況下不必考慮它們。;;;;使用mysql_error() 和mysql_er r n o ( )。這些函數(shù)報(bào)告了MySQL服務(wù)器返回的錯(cuò)誤信息。它們與相應(yīng)的C API 調(diào)用相類似。mysql_error() 以字符串形式返回錯(cuò)誤信息(如果不發(fā)生錯(cuò)誤就返回空字符串)。mysql_errno() 返回一個(gè)錯(cuò)誤數(shù)字(如果不發(fā)生錯(cuò)誤就返回0)。兩個(gè)函數(shù)都有指定與MySQL服務(wù)器連接的連接標(biāo)識(shí)符參數(shù),在返回狀態(tài)的連接上都返回最近調(diào)用的MySQL函數(shù)的錯(cuò)誤信息。連接標(biāo)識(shí)符是可選的,如果缺失,就使用最近打開(kāi)的連接。例如,可以這樣報(bào)告mysql_query() 的錯(cuò)誤:;;;;mysql_error() 和mysql_errno() 的PHP 版本在一個(gè)重要方面與C API 中對(duì)應(yīng)的部分不同。在C 中,即使試圖連接服務(wù)器失敗,也會(huì)得到錯(cuò)誤信息。相反, PHP 調(diào)用直到連接建立成功,才返回有用的連接信息。換句話說(shuō),如果連接失敗,就不能用mysql_error() 和mysql_er r n o ( ) 報(bào)告失敗原因。如果要報(bào)告連接失敗的特殊原因而不是普通原因,則必須做特殊的考慮。請(qǐng)參閱附錄H“PHP API 參考,其中詳細(xì)介紹了如何去做。;;;;當(dāng)檢測(cè)到錯(cuò)誤時(shí),本章的腳本打印了相當(dāng)普通的錯(cuò)誤信息,如“查詢失敗。然而在開(kāi)發(fā)腳本時(shí),您會(huì)發(fā)現(xiàn):加入一個(gè)mysql_error() 調(diào)用對(duì)幫您發(fā)現(xiàn)錯(cuò)誤的特殊原因是很有用的。引用問(wèn)題;;;;在PHP 中構(gòu)造查詢字符串時(shí),知道引用問(wèn)題是必要的,就像在C 和Perl 中一樣。雖然函數(shù)名在各種語(yǔ)言中是不同的,但處理引用問(wèn)題的方法卻是類似的。假設(shè)正在構(gòu)造一個(gè),將新的記錄插入到表中的查詢,可以在值的前后加上引號(hào)插入到字符串列中:;;;;這里的問(wèn)題是引用值的本身還包含著引號(hào)(“O’M a l l e y),如果將查詢發(fā)送到MySQL服務(wù)器會(huì)導(dǎo)致語(yǔ)法錯(cuò)誤。在C 中我們調(diào)用mysql_escape_string() 解決這個(gè)問(wèn)題。在Perl DBI腳本中則使用quote( ) 。PHP 有一個(gè)addslashes( ) 函數(shù)可以完成同樣的事情。例如,調(diào)用a d d s l a s h e s(“O’ Malley)返回“O’ Malley 值。將前面的實(shí)例做如下編寫來(lái)解決引用問(wèn)題:;;;;DBI quote( ) 方法是把前后的引號(hào)加到字符串中。addslashes( ) 則不是,因此我們?nèi)孕柙诓樵冏址幸迦胫档闹車鷮⒛切┮?hào)顯式地指定出來(lái)。;;;;當(dāng)編寫信息出現(xiàn)在Web 頁(yè)面上時(shí)也將發(fā)生引用問(wèn)題。如果正在編寫一個(gè)將作為HTML 或U R L的部分出現(xiàn)的字符串,而且這個(gè)字符串包含HTML 或URL 內(nèi)部的特殊字符,最好將它編碼。PHP 函數(shù)htmlspecialchars( ) 和urlencode( ) 可以做到這點(diǎn),它們與C G I . p mescapeHTML( ) 和escape( ) 方法相類似。

標(biāo)簽: PHP
相關(guān)文章:
主站蜘蛛池模板: 狠狠艹| 久久男人天堂 | 精品国产一区二区三区久久影院 | 日本不卡视频 | 一级全黄少妇性色生活片毛片 | 国产精品色在线网站 | 亚洲精品久久久久久久久久久久久 | 精品国产乱码一区二区三区四区 | 91久久久久久 | 99久久精品国产一区二区三区 | 日韩欧美在线观看视频网站 | 国产精品久久久久久亚洲调教 | 久久久久久国产一级毛片高清版 | 欧美一级毛片免费看 | 国产小视频网站 | 91精品国产综合久久久久久丝袜 | 精品一区久久 | 老司机深夜福利视频 | 久久国| 日韩欧美在线一区 | 一区三区在线观看 | 日韩精品视频三区 | 色欧美片视频在线观看 | 国产一区二区久久久 | 亚洲精品久久久久久国产精华液 | 在线免费国产视频 | 91久久久久久 | 亚洲日本中文 | 亚洲精品视频免费看 | 国产伦精品一区二区三区高清 | 日本久久久久久 | 国产精品久久久久久久久免费高清 | 国产精品女教师av久久 | 国产精品不卡 | 国产小视频在线 | 国产色在线| 成人在线免费观看 | 在线免费视频成人 | 在线观看免费国产 | 亚洲婷婷一区 | 久久99精品久久久久久按摩秒播 | 99精品免费在线 | 97伦理电影 | 欧美一区二区三 | 国产日韩欧美 | 亚洲美乳中文字幕 | 在线观看日韩 | 秋霞电影院午夜伦 | 亚洲一区视频 | 日韩精品在线观看一区 | 欧美精品1| 国产精品日本一区二区在线播放 | 一区二区三区国产 | 国产第一页在线播放 | 一区二区三区免费看 | 成人精品三级av在线看 | 亚洲www永久成人夜色 | 国产乱人伦av在线a jizz久久久 www.亚洲 | 欧美日韩不卡在线 | 日韩欧美国产精品综合嫩v 国产高清av在线一区二区三区 | 久久99精品久久久久久噜噜 | 精品99在线 | 国产一区二区三区 | 91麻豆精品国产91久久久更新资源速度超快 | 欧美一区二区伦理片 | 91久草视频 | 亚色在线| 一区二区日韩精品 | 蜜臀视频在线观看 | 夜夜骑天天操 | 国产精品美女久久久 | 在线视频第一页 | 婷婷久久综合 | 亚洲国产情侣自拍 | 久操不卡 | 北条麻妃99精品青青久久主播 | 久草免费福利 | 欧美在线高清 | 国产一区二区三区四区五区加勒比 | 日韩国产一区 | 欧美激情在线精品一区二区三区 | 久久久精品一区 | 成人亚洲精品777777大片 | 欧美视频在线播放 | 国产在视频一区二区三区吞精 | 国产免费一区二区三区 | 最新午夜| 国产成人久久精品一区二区三区 | 黄色片在线 | 国产精品一区二区视频 | 国产精品久久久久久久久免费高清 | 99国产精品久久久久久久久久 | 免费一区二区三区 | 欧美在线视频一区 | 国产www精品 | 国产一区| 欧美日韩亚洲三区 | 国产视频久久久 | 91社影院在线观看 | 亚洲欧洲精品成人久久奇米网 | 亚洲一区二区中文字幕 | 欧美中文字幕一区二区 | 欧美成人高清视频 | 久久久久亚洲精品 | 91香蕉视频在线观看 | 国产精品45p | 99久久久国产精品美女 | 久久福利 | 欧美国产一区二区 | 成人欧美一区二区三区黑人孕妇 | 一级在线播放 | 日韩aⅴ一区二区三区 | 午夜不卡福利视频 | 国产区精品 | 在线视频自拍 | 中文字幕在线第一页 | 国产色在线 | 一区二区久久 | 精品九九九 | 久久久久久影院 | 在线看亚洲 | 国产一级一级特黄女人精品毛片 | 日韩99| 亚洲精品在| 成人免费一区二区三区视频网站 | 天天操天天干视频 | 亚洲男人天堂网 | 99免费精品 | 国产精品久久国产精麻豆99网站 | 亚洲男人天堂网 | 国产亚洲一区二区三区在线观看 | 亚洲免费在线 | 国产视频中文字幕 | 一区免费视频 | 动漫泳衣美女 | 午夜寂寞少妇aaa片毛片 | 黄色网免费看 | 日韩h视频 | 国产区视频在线观看 | 国产精品毛片一区二区在线看 | 亚洲 中文 欧美 日韩 在线观看 | 91午夜伦伦电影理论片 | av午夜| 中出片| 盗摄精品av一区二区三区 | 日韩一区二区观看 | www.av在线| 99re免费视频精品全部 | 欧美一区二区三区在线观看视频 | 欧美日韩国产一区二区三区不卡 | 亚洲精品一区久久久久久 | 亚洲精品久久久久久国产精华液 | 国产免费一区二区 | 国产一区二区三区久久久 | 国产一区二区免费 | a黄视频| 最新国产精品 | 亚洲精品久久久久久一区二区 | 成人av网页 | 成人精品 | 在线国产一区二区 | 国产激情视频在线观看 | 日韩在线视频第一页 | 国产日韩欧美一区二区 | 在线播放亚洲 | 特黄级国产片 | 亚洲一区视频在线 | 久久伊人av | 在线免费av观看 | 蜜臀网| www.久久.com| 国产传媒在线观看 | 欧美日韩专区 | 91精品国产综合久久婷婷香蕉 | 久久精品1| 黄色av网站在线免费观看 | 国产精品日本一区二区在线播放 | 亚洲欧美日韩另类精品一区二区三区 | 中文字幕在线亚洲 | 国产精品久久久久久久久久久久久久 | 国产精品久久久久久久免费大片 | 国产亚洲精品成人av久久影院 | 日韩视频免费 | 天天操天天碰 | 日本欧美在线观看 | 国产精品欧美日韩 | av在线成人 | 国产精品影视 | 夜夜天天操 | 久久成人av | 天天爽夜夜爽夜夜爽精品视频 | 国产亚洲一区二区三区在线观看 | 久久午夜综合久久 | www久久久| 亚洲成人观看 | 免费观看h视频 | 亚洲狠狠爱 | 亚洲经典视频在线观看 | 国产二区免费 | 日韩在线不卡一区 | 在线国产一区 | 韩日av在线| av黄色在线看 | 欧美性网| 狠狠躁夜夜躁人人爽天天天天97 | www.色94色.com | 亚洲国产区 | 成人av免费看 | 欧美精产国品一二三区 | 免费一级 国产 | 天天宗合网 | 日韩美女av在线 | 人人艹人人 | 日本一区二区电影 | 看免费的毛片 | 日韩在线欧美 | 国产超碰在线 | 午夜精品久久久久久久久久久久 | 26uuu成人免费毛片 | 欧美久久一级特黄毛片 | 成人国产精品久久 | 亚洲免费观看 | 丁香五月亚洲综合在线 | 成人午夜剧场 | 国产三级电影 | 亚洲大片一区 | 成人免费视屏 | 中文字字幕一区二区三区四区五区 | 久久久久久国产视频 | 在线国产一区二区 | 国产精品美女久久久久久免费 | 国产女人和拘做受在线视频 | 日日夜夜国产 | 日韩av一区二区三区在线观看 | 国产欧美一区二区精品性色 | 欧美欧美欧美 | 搡女人真爽免费午夜网站 | 成人影音| 亚洲第一黄 | 毛片网 | 国产精选一区二区三区不卡催乳 | 亚洲人成网站999久久久综合 | 亚洲小视频| 国产欧美一区二区三区在线看 | 一级看片| 亚洲精品免费在线观看 | 97在线观看视频 | 91高清视频在线观看 | 一区二区三区av | 99伊人| 亚洲成人免费在线观看 | 国产欧美日韩综合精品一 | 五月天婷婷激情视频 | 男女视频免费在线观看 | 青青草视频免费观看 | 久久精品视频网站 | 91亚洲精品在线观看 | 99色影院| 国产精品成人品 | 亚洲网站在线观看 | 免费毛片网 | 国产高清在线 | 成人综合网站 | 欧美一区久久 | 久爱国产| 国产精品一区二区视频 | 综合99 | 亚洲精品久久久久久久久 | 亚洲国产精品成人无久久精品 | 综合中文字幕 | 亚洲精品在线视频 | 成人精品国产 | 精品伦理一区二区三区 | 日韩精品视频免费看 | 日韩欧美在线视频观看 | 国产高清在线 | 国产私拍视频 | 中文亚洲 | 国产欧美日韩综合精品 | 国产精品三级久久久久久电影 | 国产毛片毛片 | 亚洲中午字幕在线观看 | 国产猛男猛女超爽免费视频网站 | 黄色av网站在线观看 | 亚洲精品乱码久久久久久 | 日韩在线播放欧美字幕 | 中字幕视频在线永久在线观看免费 | 国产精品久久久久久久福利院 | 亚洲精品片 | 午夜小影院 | 羞羞视频网站在线看 | 国产精品人人做人人爽 | 国产96视频 | 成人亚洲精品久久久久软件 | 欧美另类久久 | 日韩欧美在线综合 | 中文字幕天天操 | 在线观看免费毛片视频 | 国产91亚洲精品久久久 | 日韩精品一91爱爱 | 日韩精品99 | 亚洲一本| 国产黄视频在线 | 欧美日韩国产在线播放 | 综合视频一区二区三区 | 久久精品亚洲精品 | 色成人免费网站 | 成人一区二区在线 | 综合久久综合久久 | 成人免费福利视频 | 色综合网址 | 国产精品久久久久久久免费大片 | 成人妇女免费播放久久久 | 亚洲一区二区三区免费视频 | 国产精品久久久久久久久久久久冷 | 天天澡天天狠天天天做 | 日韩伦理一区二区 | 欧美成人一区二区三区片免费 | 日韩精品专区 | 中文字幕一区二区在线观看 | 黄色片免费观看 | 久草天堂 | 日韩中文字幕 | 国产精品二区三区在线观看 | 成人午夜免费网站 | 精品少妇一区二区三区在线播放 | 国产乡下妇女做爰视频 | 美女黄视频网站 | 国产精品福利视频 | 秋霞在线一区 | 日韩电影中文字幕 | 美女主播精品视频一二三四 | 福利视频一区 | 亚洲黄色一级毛片 | 国产精品毛片无码 | 国产精品一区二区三区免费视频 | 亚洲国产成人精品女人久久久 | 色婷婷综合久久久中文字幕 | 狠狠干狠狠干 | av影音 | 精品久久久久久久久久久久久久 | www.一区| 狠狠视频| aaaa大片| 日韩视频在线一区二区 | 欧美日韩91 | 精品美女在线 | 日韩一区二区三区在线视频 | 人人爽在线 | av在线毛片 | 国产91对白叫床清晰播放 | 亚洲一道本 | 不用播放器的av | 免费观看国产精品 | 在线免费毛片 | jlzzjlzz亚洲日本少妇 | 欧美性网 | 99视频免费在线观看 | 久久久久久久久一区二区三区 | 国产精品久久 | 欧美电影一区 | 伊人电院网 | 91久久国产精品 | 中文一区二区 | av解说在线精品 | 精品国产区 | 蜜桃av一区二区三区 | 日韩成人在线电影 | 中文二区 | 国产精品亚欧美一区二区 | 亚洲成人精品区 | 日韩一区二区三区在线播放 | www日本高清 | 成人亚洲精品 | 久久久tv | 一区二区中文 | 北条麻妃一区二区三区在线观看 | 中文字幕三区 | 亚洲一区视频 | 国产在线观看高清 | 天天操狠狠操 | 久久一级 | 亚洲第一视频 | 欧美中文字幕在线观看 | 99爱爱视频 | 日本涩涩网站 | 成人精品一区二区三区中文字幕 | 亚洲视频在线观看一区二区三区 | 久久a视频| 国产最新视频在线 | 久久久亚洲综合 | 成人亚洲精品 | 日韩精品成人 | 日韩一区二区在线观看 | 成人免费视频在线观看 | 91精品电影 | 久久久久久网址 | 亚洲精品午夜国产va久久成人 | av免费网站在线观看 | 国产欧美综合一区二区三区 | 在线观看成人 | 午夜爽| 国产视频久久 | 欧美精品一区三区 | 免费在线一区二区三区 | 久久91精品国产 | 欧美一级做a爰片免费视频 亚洲精品一区在线观看 | 日本三级黄色录像 | 国产婷婷在线观看 | 国产精品久久久久久吹潮 | 在线永久免费观看日韩a | 国产精品99久久免费观看 | 精品国产91乱码一区二区三区 | 91看片淫黄大片一级在线观看 | 国产一级视频免费观看 | 97在线视频免费 | 99这里只有精品视频 | 黄色成人在线 | 日韩精品一区在线 | 欧美精品1| 视频一区二区三区免费观看 | 国产一区网站 | 日韩欧美精品一区二区三区 | 日韩在线视频中文字幕 | 岛国一区| 国产一级毛片在线视频 | 久操视频在线 | 精品久久久久久久 | 国产毛片在线看 | 日韩欧美精品一区二区三区 | 国产女人和拘做受视频 | jlzzjlzz亚洲日本少妇 | 国产美女视频一区 | 欧美视频三级 | 久久久国产日韩 | 日韩欧美精品一区二区三区 | 国产日韩精品一区二区在线观看播放 | 91性高湖久久久久久久久_久久99 | 一区日韩 | 青楼18春一级毛片 | 一区二区三区影视 | 日本久久精品一区 | 亚洲综合精品 | 一区二区三区在线观看国产 | 久草青青| 国产99精品视频 | 91视频在线播放视频 | 国产一级毛片国语一级 | 欧美一区二区三区视频在线观看 | 欧美性猛片 | 羞羞视频网站免费看 | 日韩在线一区二区 | 九色视频在线播放 | 亚洲美女一区二区三区 | 国产专区一区二区三区 | 女男羞羞视频网站免费 | 久久成人免费 | 亚洲精品电影网在线观看 | 亚洲美女性视频 | 亚洲国产精品一区 | 久久久久久国产精品 | 成人欧美一区二区 | 成人在线 | 鲁一鲁影院| www.中文字幕在线 | 激情福利视频 | 久久久久亚洲一区二区三区 | 久久精品国产99国产精品 | av亚洲在线 | 日韩五码 | 亚洲资源在线 | 欧美日韩一级电影 | 欧美日韩在线免费观看 | 久99视频| 国产精品入口久久 | 国产精品久久久久久久久久 | 超碰在线看 | 91一区二区 | 欧美free性丝袜xxxxhd | 亚洲精品v | 免费一级毛片 | 午夜免费电影 | 亚洲永久免费视频 | 日本全黄裸体片 | 久久精品无码一区二区三区 | 一区二区免费视频 | 一区二区三区四区 | 成人黄色在线视频 | 日韩和的一区二在线 | 国产精品2 | 91视频播放 | 99久久精品一区二区 | www.麻豆av | 日韩成人在线免费视频 | 欧美 日韩 在线播放 | 北条麻妃国产九九九精品小说 | 成人在线看片 | 成人高清网站 | 国产成人在线免费观看 | 成人三级网址 | 成人在线不卡 | 欧美日本国产 | www.av在线| 高清国产午夜精品久久久久久 | 亚洲激情第一页 | 日韩av免费在线观看 | 一级大片av | 色综合99 | 欧美天堂在线观看 | 国产视频久久 | 亚洲性视频网站 | 午夜精品久久久久久久久久久久久 | 欧美日韩中文字幕在线播放 | 亚洲一区二区黄 | 国产欧美日韩综合精品一区二区 | 自拍亚洲 | 九九天堂网 | 久二影院| 亚洲xx视频 | 欧美乱轮 | 天天插天天射天天干 | 先锋影音在线观看 | 黄色一级毛片免费 | 久久6| 日韩成人不卡 | 白浆视频在线观看 | 免费观看一级毛片 | 懂色av一区二区三区在线播放 | 成人久久久精品乱码一区二区三区 | 99精品久久久 | 国产一区二区黑人欧美xxxx | 日本一区二区高清不卡 | 2024天天干 | 综合伊人 | 成人一区二区三区在线 | 精品久久久久久久久久 | 亚洲一区二区三区免费在线观看 | 国产精品久久久久久一区二区三区 | 人成亚洲 | 中文无码久久精品 | 99爱视频 | 成年人在线观看 | 天天天天爽 | 毛片网络| 91九色视频 | 夜夜操导航 | 免费久久久 | 精品免费在线 | 精品国产一区二区三区久久久蜜月 | 久久人爽 | 国产美女高潮 | 国产区视频在线观看 | 九九热这里都是精品 | 国产日韩精品一区二区 | 亚洲成人av在线 | 九九热在线免费视频 | 男人久久天堂 | 九色在线观看 | 国产视频自拍一区 | 天天天插| 日韩欧美一区二区三区 | 精品久久久久久国产 | 欧美不卡一区二区 | 久久久久久网址 | 一道本一区二区三区 | 91高清免费看| 成人无遮挡毛片免费看 | 亚洲国产成人av好男人在线观看 | 久久综合久色欧美综合狠狠 | 国产一区二区精品久久 | 日韩国产二区 | 91欧美| 成人h动漫免费观看网站 | 99精品免费观看 | 国产高清精品在线 | 精品久久97 | 国产精品18hdxxxⅹ在线 | 九九精品视频在线观看 | 一区二区三区四区日韩 | 亚洲综合色自拍一区 | 91福利影院在线观看 | 好看的一级毛片 | 国产色| 男人久久天堂 | 精品国产髙清在线看国产毛片 | 99热手机在线观看 | 国产电影一区二区在线观看 | 亚洲精品成人免费 | 麻豆一区二区三区 | 福利一区二区 | 国产精品久久久久久久久免费丝袜 | av在线免费观看网站 | 日韩三区| 国产精品日韩三级 | 国产精品2区 | 日韩国产高清在线 | 成人精品鲁一区一区二区 | 亚洲高清免费视频 | 精品国产91亚洲一区二区三区www | 国产中文一区 | 亚洲精品乱码 | 日本激情网 | 国产视频中文字幕 | 日韩国产高清在线 | 国产成人精品一区二区三区四区 | 午夜视频在线观看免费视频 | 四虎欧美 | 婷婷久久综合九色综合绿巨人 | 在线观看成人av | 成人在线观看中文字幕 | 日韩精品视频在线观看一区二区 | 亚洲电影在线观看 | 欧美成人精品在线观看 | 天天干夜夜拍 | www.欧美.com |