freepeople性欧美熟妇, 色戒完整版无删减158分钟hd, 无码精品国产vα在线观看DVD, 丰满少妇伦精品无码专区在线观看,艾栗栗与纹身男宾馆3p50分钟,国产AV片在线观看,黑人与美女高潮,18岁女RAPPERDISSSUBS,国产手机在机看影片

正文內(nèi)容

perldbi基礎(chǔ)word版(編輯修改稿)

2024-09-13 04:56 本頁(yè)面
 

【文章內(nèi)容簡(jiǎn)介】 $ i。在前述的樣例中, 我們提取每一行, 然后保存對(duì)它的引用??梢栽O(shè)想調(diào)用fetchrow_arrayref 而不是直接地檢索行引用可能更有效率:它不能正常工作,因?yàn)閒etchrow_arrayref 重新使用了引用指向的數(shù)組。結(jié)果矩陣是一個(gè)引用的數(shù)組,數(shù)組中的每個(gè)元素都指向相同行—最后檢索的行。因此,如果想一次提取一行,則要使用fetchrow_array 而不是fetchrow_arrayref。另一個(gè)選擇是使用提取循環(huán),可以使用返回整個(gè)結(jié)果集的DBI 方法中的一個(gè)。例如,fetchall_arrayref 返回對(duì)引用數(shù)組的引用,數(shù)組的每個(gè)元素都指向結(jié)果集中某行。這非常簡(jiǎn)單,但很有效,這個(gè)返回值是對(duì)矩陣的引用。要想使用fetchall_arrayref,則調(diào)用prepare和execute,然后如下檢索結(jié)果:如果結(jié)果集為空,則fetchall_arrayref 返回一個(gè)對(duì)空數(shù)組的引用。如果出現(xiàn)錯(cuò)誤,則結(jié)果為un d e f,所以如果沒(méi)有啟用R a i s e E r r o r,則在開(kāi)始使用它以前,要確保檢查返回值。行數(shù)和列數(shù)由矩陣是否為空來(lái)確定。如果想作為一個(gè)數(shù)組這個(gè)矩陣的整個(gè)行$ i,應(yīng)該使用語(yǔ)法@ { $ m a t r i x _ r e f [ $ i ] }。使用fetchall_arrayref 來(lái)檢索結(jié)果集當(dāng)然比編寫一個(gè)提取行的循環(huán)要更簡(jiǎn)單一些,盡管數(shù)組元素的語(yǔ)法是一個(gè)小技巧。一個(gè)與fetchall_arrayref 方法相類似,但卻做了工作的方法是selectall_arrayref。這個(gè)方法為您完成了整個(gè)prepare、execute、提取循環(huán)、finish 序列。為了使用selectall_arrayref,應(yīng)該利用庫(kù)句柄直接將查詢傳遞給它:5. 檢查NULL 值從庫(kù)中檢索時(shí),可能需要區(qū)分值為NULL 、為0 或者為空字符串的列。因?yàn)镈BI 返回NULL 列值作為un d e f,所以這種區(qū)分是容易的。然而,必須確保使用正確的測(cè)試。如果試用下面的代碼段,則它所有三次顯示都為“ f a l s e !”:而且,對(duì)于這兩個(gè)測(cè)試,這段代碼都顯示“ f a l s e !”:下面這段代碼效果相同:要想?yún)^(qū)分NULL 列值和非NULL 列值,則使用defined。知道了沒(méi)有出現(xiàn)NULL 值之后,使用適當(dāng)?shù)臏y(cè)試可以在其他類型值之間加以區(qū)分。例如:以適當(dāng)?shù)拇涡蛲瓿蛇@些測(cè)試是很重要的,因?yàn)槿绻?col_val 為空字符串,則第二個(gè)和第三個(gè)比較就都為真。如果顛倒比較的次序,則會(huì)錯(cuò)誤地將空字符串標(biāo)識(shí)為0。引用問(wèn)題迄今為止,我們已經(jīng)利用引用字符串以最基本的方式構(gòu)造了查詢。在引用的字符串含有引用值時(shí),會(huì)在Perl 詞匯一級(jí)產(chǎn)生問(wèn)題。在插入或者選擇含有引號(hào)、反斜杠或二進(jìn)制的值時(shí),在SQL 中也可能出問(wèn)題。如果指定一個(gè)查詢作為Perl 引用的字符串,則必須避免在查詢字符串本身中出現(xiàn)引用字符:Perl 和MySQL都允許用單引號(hào)或雙引號(hào)引用字符串,所以混合使用引用字符有時(shí)可以避免這種無(wú)法引用引用字符自身的情況:然而,在Perl 中,這兩種類型的引號(hào)并不等價(jià)。只有在雙引號(hào)內(nèi)部才解釋為變量引用。因此,當(dāng)想通過(guò)在查詢字符串中嵌入變量引用來(lái)構(gòu)造查詢時(shí),單引號(hào)并不是非常有用的。例如,如果$var 的值為14,則下面的兩個(gè)字符串并不等價(jià):兩個(gè)字符串的解釋如下所示;顯然,第一個(gè)字符串與希望傳遞給MySQL器的內(nèi)容更為相像:用雙引號(hào)來(lái)引用字符串的另一個(gè)選擇是使用qq{} 結(jié)構(gòu),它告訴Perl 在‘q q {’和‘}’之間的每個(gè)字符都要看作為雙引號(hào)括起的字符串(兩個(gè)q 表示“雙引號(hào)”)。例如,下列兩行是等價(jià)的:使用qq{} 時(shí),構(gòu)造查詢不用過(guò)多考慮引號(hào)的問(wèn)題,因?yàn)榭梢栽谶@個(gè)查詢字符串內(nèi)自由地使用引號(hào)(單引號(hào)或雙引號(hào)),而不用避開(kāi)它們。此外,還解釋了變量引用。qq{} 的這兩種特性可用下面的INSERT 語(yǔ)句來(lái)說(shuō)明:不一定使用‘ {’和‘ }’作為qq 的分隔符。其他格式,如qq 和q q / /,也可以使用,只要封閉的分隔符不出現(xiàn)在字符串內(nèi)即可。我喜歡用q q { },因?yàn)椤?{’不像‘)’或‘/’會(huì)出現(xiàn)在查詢的文本內(nèi),并且在查詢字符串的結(jié)尾也可能有問(wèn)題。例如,‘)’出現(xiàn)在所顯示的INSERT 語(yǔ)句的內(nèi)部,所以qq 對(duì)于引用查詢字符串來(lái)說(shuō)不是一個(gè)有用的結(jié)構(gòu)。qq{} 結(jié)構(gòu)能跨行,如果想讓查詢字符串在Perl 代碼中醒目,這很有用:如果希望將查詢格式分為多個(gè)行,從而使它的可讀性更強(qiáng),這樣也很有用。例如,dump_members 腳本中的SELECT 語(yǔ)句用q q { }編寫雙引號(hào)字符串也可以跨行。但是,對(duì)于編寫多行的字符串,我更喜歡用q q { }。我發(fā)現(xiàn)當(dāng)在一行中看到不匹配的引號(hào)時(shí),我就自然地去想,“這會(huì)是語(yǔ)法錯(cuò)誤嗎?”,然后,我就會(huì)浪費(fèi)時(shí)間去尋找相匹配的引號(hào)。qq{} 結(jié)構(gòu)在Perl 詞匯級(jí)注意了引用的問(wèn)題,因此可將引號(hào)容易地放到字符串內(nèi),而不會(huì)使Perl 搞混它們。然而,還必須考慮SQL 級(jí)的語(yǔ)法。考慮向member 表中插入一條記錄:do 發(fā)送給MySQL的字符串如下所示:這是不合法的SQL 語(yǔ)句,因?yàn)樵趩我?hào)字符串內(nèi)出現(xiàn)了單引號(hào)。在第6章中,我們遇到過(guò)類似的引用問(wèn)題。在那里,我們使用mysql_escape_string 來(lái)處理這個(gè)問(wèn)題。DBI 提供了一個(gè)類似的機(jī)制—在一條語(yǔ)句中,對(duì)想按字面使用的每個(gè)引用值,都調(diào)用quote 方法,并使用它的返回值。前面的例子可編寫現(xiàn)在,do 發(fā)送給MySQL的字符串如下所示,具有出現(xiàn)在引用字符串內(nèi)的可能對(duì)器轉(zhuǎn)義的引號(hào):請(qǐng)注意,在查詢字符串中引用$last 和$first 時(shí),不要增加括起來(lái)的引號(hào); quote 方法支持它們。如果增加了引號(hào),則查詢將出現(xiàn)過(guò)多的引號(hào),如下面的例子所示:這些語(yǔ)句產(chǎn)生下面的輸出:占位符和參數(shù)約束在前面各節(jié)中,我們通過(guò)把要插入或選擇的值作為選擇標(biāo)準(zhǔn),直接放在查詢字符串中構(gòu)造了查詢。不一定非要這樣做。DBI允許在查詢字符串內(nèi)部放置一些稱為占位符的特殊標(biāo)記符,然后,在執(zhí)行該查詢時(shí),將這些值代替那些標(biāo)識(shí)符來(lái)使用。這樣做的主要原因是提高性能,特別是在循環(huán)中反復(fù)執(zhí)行某個(gè)查詢的時(shí)候。為了說(shuō)明占位符如何工作,舉例說(shuō)明。假設(shè)學(xué)校新學(xué)期剛開(kāi)始,打算清理學(xué)分薄的student 表,然后利用包含在文件中的一列學(xué)生姓名將其初始化,使其包含新學(xué)生。不用占位符,可以如下這樣刪除現(xiàn)有表的內(nèi)容,并裝入新的姓名:這樣做效率很低,因?yàn)镮NSERT 查詢的基本格式每次都是相同的,并且在整個(gè)循環(huán)中,do 每次都調(diào)用prepare 和execute。在進(jìn)入這個(gè)循環(huán)以前,只調(diào)用一次prepare 來(lái)設(shè)置INSERT 語(yǔ)句,并且在這個(gè)循環(huán)內(nèi)部只調(diào)用execute,這樣做效率更高一些。只調(diào)用一次prepa
點(diǎn)擊復(fù)制文檔內(nèi)容
環(huán)評(píng)公示相關(guān)推薦
文庫(kù)吧 www.dybbs8.com
備案圖片鄂ICP備17016276號(hào)-1