您好,登錄后才能下訂單哦!
這篇文章給大家介紹MySQL中mysql_store_result() 和 mysql_use_result() 函數的區別是什么,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。
函數mysql_store_result()與mysql_use_result()類似,它們都有連接處理程序參數,并返回結果集。但實際上兩者間的區別還是很大的。兩個函數之間首要的區別在于從服務器上檢索結果集的行。
當調用時,mysql_store_result()立即檢索所有的行,而mysql_use_result()啟動查詢,但實際上并未獲取任何行,mysql_store_result()假設隨后會調用mysql_fetch_row()檢索記錄。這些行檢索的不同方法引起兩者在其他方面的不同。本文加以比較,以便了解如何選擇最適合應用程序的方法。
當mysql_store_result()從服務器上檢索結果集時,就提取了行,并為之分配內存,存儲到客戶機中,隨后調用mysql_fetch_row()就再也不會返回錯誤,因為它僅僅是把行脫離了已經保留結果集的數據結構。
mysql_fetch_row()返回NULL始終表示已經到達結果集的末端。相反,mysql_use_result()本身不檢索任何行,而只是啟動一個逐行的檢索,就是說必須對每行調用mysql_fetch_row()來自己完成。既然如此,雖然正常情況下,mysql_fetch_row()返回NULL仍然表示此時已到達結果集的末端,但也可能表示在與服務器通信時發生錯誤。可通過調用mysql_errno()和mysql_error()將兩者區分開來。
與mysql_use_result()相比,mysql_store_result()有著較高的內存和處理需求,因為是在客戶機上維護整個結果集,所以內存分配和創建數據結構的耗費是非常巨大的,要冒著溢出內存的危險來檢索大型結果集,如果想一次檢索多個行,可用mysql_use_result() 。mysql_use_result()有著較低的內存需求,因為只需給每次處理的單行分配足夠的空間。這樣速度就較快,因為不必為結果集建立復雜的數據結構。另一方面,mysql_use_result()把較大的負載加到了服務器上,它必須保留結果集中的行,直到客戶機看起來適合檢索所有的行。這就使某些類型的客戶機程序不適用mysql_use_result():在用戶的請求下提前逐行進行的交互式客戶機程序(不必僅僅因為用戶需要喝杯咖啡而讓服務器等待發送下一行)。
在行檢索之間做了許多處理的客戶機程序。在所有這些情況下,客戶機程序都不能很快檢索結果集的所有行,它限制了服務器,并對其他客戶機程序產生負面的影響,因為檢索數據的表在查詢過程中是讀鎖定的。要更新表的客戶機或要插入行的任何客戶機程序都被阻塞。
在使用mysql_query()進行一個查詢后,一般要用這兩個函數之一來把結果存到一個MYSQL_RES *變量中。
兩者的主要區別是,mysql_use_result()的結果必須“一次性用完”,也就是說用它得到一個result后,必須反復用mysql_fetch_row()讀取其結果直至該函數返回null為止,否則如果你再次進行mysql查詢,就會得到“Commands out of sync; you can’t run this command now”的錯誤。而mysql_store_result()得到的result是存下來的,你無需把全部行結果讀完,就可以進行另外的查詢。例如你進行一個查詢,得到一系列記錄,再根據這些結果,用一個循環再進行數據庫查詢,就只能用mysql_store_result()。
關于MySQL中mysql_store_result() 和 mysql_use_result() 函數的區別是什么就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。