這篇文章給大家介紹MySQL中mysql_store_result() 和 mysql_use_result() 函數(shù)的區(qū)別是什么,內(nèi)容非常詳細(xì),感興趣的小伙伴們可以參考借鑒,希望對(duì)大家能有所幫助。
廣河網(wǎng)站建設(shè)公司創(chuàng)新互聯(lián),廣河網(wǎng)站設(shè)計(jì)制作,有大型網(wǎng)站制作公司豐富經(jīng)驗(yàn)。已為廣河上千多家提供企業(yè)網(wǎng)站建設(shè)服務(wù)。企業(yè)網(wǎng)站搭建\成都外貿(mào)網(wǎng)站建設(shè)要多少錢(qián),請(qǐng)找那個(gè)售后服務(wù)好的廣河做網(wǎng)站的公司定做!
函數(shù)mysql_store_result()與mysql_use_result()類(lèi)似,它們都有連接處理程序參數(shù),并返回結(jié)果集。但實(shí)際上兩者間的區(qū)別還是很大的。兩個(gè)函數(shù)之間首要的區(qū)別在于從服務(wù)器上檢索結(jié)果集的行。
當(dāng)調(diào)用時(shí),mysql_store_result()立即檢索所有的行,而mysql_use_result()啟動(dòng)查詢(xún),但實(shí)際上并未獲取任何行,mysql_store_result()假設(shè)隨后會(huì)調(diào)用mysql_fetch_row()檢索記錄。這些行檢索的不同方法引起兩者在其他方面的不同。本文加以比較,以便了解如何選擇最適合應(yīng)用程序的方法。
當(dāng)mysql_store_result()從服務(wù)器上檢索結(jié)果集時(shí),就提取了行,并為之分配內(nèi)存,存儲(chǔ)到客戶(hù)機(jī)中,隨后調(diào)用mysql_fetch_row()就再也不會(huì)返回錯(cuò)誤,因?yàn)樗鼉H僅是把行脫離了已經(jīng)保留結(jié)果集的數(shù)據(jù)結(jié)構(gòu)。
mysql_fetch_row()返回NULL始終表示已經(jīng)到達(dá)結(jié)果集的末端。相反,mysql_use_result()本身不檢索任何行,而只是啟動(dòng)一個(gè)逐行的檢索,就是說(shuō)必須對(duì)每行調(diào)用mysql_fetch_row()來(lái)自己完成。既然如此,雖然正常情況下,mysql_fetch_row()返回NULL仍然表示此時(shí)已到達(dá)結(jié)果集的末端,但也可能表示在與服務(wù)器通信時(shí)發(fā)生錯(cuò)誤??赏ㄟ^(guò)調(diào)用mysql_errno()和mysql_error()將兩者區(qū)分開(kāi)來(lái)。
與mysql_use_result()相比,mysql_store_result()有著較高的內(nèi)存和處理需求,因?yàn)槭窃诳蛻?hù)機(jī)上維護(hù)整個(gè)結(jié)果集,所以?xún)?nèi)存分配和創(chuàng)建數(shù)據(jù)結(jié)構(gòu)的耗費(fèi)是非常巨大的,要冒著溢出內(nèi)存的危險(xiǎn)來(lái)檢索大型結(jié)果集,如果想一次檢索多個(gè)行,可用mysql_use_result() 。mysql_use_result()有著較低的內(nèi)存需求,因?yàn)橹恍杞o每次處理的單行分配足夠的空間。這樣速度就較快,因?yàn)椴槐貫榻Y(jié)果集建立復(fù)雜的數(shù)據(jù)結(jié)構(gòu)。另一方面,mysql_use_result()把較大的負(fù)載加到了服務(wù)器上,它必須保留結(jié)果集中的行,直到客戶(hù)機(jī)看起來(lái)適合檢索所有的行。這就使某些類(lèi)型的客戶(hù)機(jī)程序不適用mysql_use_result():在用戶(hù)的請(qǐng)求下提前逐行進(jìn)行的交互式客戶(hù)機(jī)程序(不必僅僅因?yàn)橛脩?hù)需要喝杯咖啡而讓服務(wù)器等待發(fā)送下一行)。
在行檢索之間做了許多處理的客戶(hù)機(jī)程序。在所有這些情況下,客戶(hù)機(jī)程序都不能很快檢索結(jié)果集的所有行,它限制了服務(wù)器,并對(duì)其他客戶(hù)機(jī)程序產(chǎn)生負(fù)面的影響,因?yàn)闄z索數(shù)據(jù)的表在查詢(xún)過(guò)程中是讀鎖定的。要更新表的客戶(hù)機(jī)或要插入行的任何客戶(hù)機(jī)程序都被阻塞。
在使用mysql_query()進(jìn)行一個(gè)查詢(xún)后,一般要用這兩個(gè)函數(shù)之一來(lái)把結(jié)果存到一個(gè)MYSQL_RES *變量中。
兩者的主要區(qū)別是,mysql_use_result()的結(jié)果必須“一次性用完”,也就是說(shuō)用它得到一個(gè)result后,必須反復(fù)用mysql_fetch_row()讀取其結(jié)果直至該函數(shù)返回null為止,否則如果你再次進(jìn)行mysql查詢(xún),就會(huì)得到“Commands out of sync; you can’t run this command now”的錯(cuò)誤。而mysql_store_result()得到的result是存下來(lái)的,你無(wú)需把全部行結(jié)果讀完,就可以進(jìn)行另外的查詢(xún)。例如你進(jìn)行一個(gè)查詢(xún),得到一系列記錄,再根據(jù)這些結(jié)果,用一個(gè)循環(huán)再進(jìn)行數(shù)據(jù)庫(kù)查詢(xún),就只能用mysql_store_result()。
關(guān)于MySQL中mysql_store_result() 和 mysql_use_result() 函數(shù)的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,可以學(xué)到更多知識(shí)。如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到。
分享文章:MySQL中mysql_store_result()和mysql_use_result()函數(shù)的區(qū)別是什么
標(biāo)題路徑:http://chinadenli.net/article46/ppcgeg.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供關(guān)鍵詞優(yōu)化、域名注冊(cè)、搜索引擎優(yōu)化、動(dòng)態(tài)網(wǎng)站、、網(wǎng)站收錄
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)