溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

MySQL中mysql_store_result() 和 mysql_use_result() 函數(shù)的區(qū)別是什么

發(fā)布時間:2021-07-28 14:22:41 來源:億速云 閱讀:129 作者:Leah 欄目:數(shù)據(jù)庫

這篇文章給大家介紹MySQL中mysql_store_result() 和 mysql_use_result() 函數(shù)的區(qū)別是什么,內(nèi)容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

函數(shù)mysql_store_result()與mysql_use_result()類似,它們都有連接處理程序參數(shù),并返回結(jié)果集。但實際上兩者間的區(qū)別還是很大的。兩個函數(shù)之間首要的區(qū)別在于從服務(wù)器上檢索結(jié)果集的行。

當調(diào)用時,mysql_store_result()立即檢索所有的行,而mysql_use_result()啟動查詢,但實際上并未獲取任何行,mysql_store_result()假設(shè)隨后會調(diào)用mysql_fetch_row()檢索記錄。這些行檢索的不同方法引起兩者在其他方面的不同。本文加以比較,以便了解如何選擇最適合應用程序的方法。

當mysql_store_result()從服務(wù)器上檢索結(jié)果集時,就提取了行,并為之分配內(nèi)存,存儲到客戶機中,隨后調(diào)用mysql_fetch_row()就再也不會返回錯誤,因為它僅僅是把行脫離了已經(jīng)保留結(jié)果集的數(shù)據(jù)結(jié)構(gòu)。

mysql_fetch_row()返回NULL始終表示已經(jīng)到達結(jié)果集的末端。相反,mysql_use_result()本身不檢索任何行,而只是啟動一個逐行的檢索,就是說必須對每行調(diào)用mysql_fetch_row()來自己完成。既然如此,雖然正常情況下,mysql_fetch_row()返回NULL仍然表示此時已到達結(jié)果集的末端,但也可能表示在與服務(wù)器通信時發(fā)生錯誤??赏ㄟ^調(diào)用mysql_errno()和mysql_error()將兩者區(qū)分開來。

與mysql_use_result()相比,mysql_store_result()有著較高的內(nèi)存和處理需求,因為是在客戶機上維護整個結(jié)果集,所以內(nèi)存分配和創(chuàng)建數(shù)據(jù)結(jié)構(gòu)的耗費是非常巨大的,要冒著溢出內(nèi)存的危險來檢索大型結(jié)果集,如果想一次檢索多個行,可用mysql_use_result()  。mysql_use_result()有著較低的內(nèi)存需求,因為只需給每次處理的單行分配足夠的空間。這樣速度就較快,因為不必為結(jié)果集建立復雜的數(shù)據(jù)結(jié)構(gòu)。另一方面,mysql_use_result()把較大的負載加到了服務(wù)器上,它必須保留結(jié)果集中的行,直到客戶機看起來適合檢索所有的行。這就使某些類型的客戶機程序不適用mysql_use_result():在用戶的請求下提前逐行進行的交互式客戶機程序(不必僅僅因為用戶需要喝杯咖啡而讓服務(wù)器等待發(fā)送下一行)。

在行檢索之間做了許多處理的客戶機程序。在所有這些情況下,客戶機程序都不能很快檢索結(jié)果集的所有行,它限制了服務(wù)器,并對其他客戶機程序產(chǎn)生負面的影響,因為檢索數(shù)據(jù)的表在查詢過程中是讀鎖定的。要更新表的客戶機或要插入行的任何客戶機程序都被阻塞。

在使用mysql_query()進行一個查詢后,一般要用這兩個函數(shù)之一來把結(jié)果存到一個MYSQL_RES *變量中。

兩者的主要區(qū)別是,mysql_use_result()的結(jié)果必須“一次性用完”,也就是說用它得到一個result后,必須反復用mysql_fetch_row()讀取其結(jié)果直至該函數(shù)返回null為止,否則如果你再次進行mysql查詢,就會得到“Commands out of sync; you can’t run this command now”的錯誤。而mysql_store_result()得到的result是存下來的,你無需把全部行結(jié)果讀完,就可以進行另外的查詢。例如你進行一個查詢,得到一系列記錄,再根據(jù)這些結(jié)果,用一個循環(huán)再進行數(shù)據(jù)庫查詢,就只能用mysql_store_result()。

關(guān)于MySQL中mysql_store_result() 和 mysql_use_result() 函數(shù)的區(qū)別是什么就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節(jié)

免責聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI