mysqli::store_result

mysqli_store_result

(PHP 5, PHP 7, PHP 8)

mysqli::store_result -- mysqli_store_result轉(zhuǎn)移上一次查詢返回的結(jié)果集

說(shuō)明

面向?qū)ο箫L(fēng)格

mysqli::store_result(int $option = ?): mysqli_result

過(guò)程化風(fēng)格

mysqli_store_result(mysqli $link, int $option = ?): mysqli_result

遷移 link 參數(shù)所指定的連接上的上一次查詢返回的結(jié)果集, 遷移之后的結(jié)果集可以 在 mysqli_data_seek() 函數(shù)中使用。

參數(shù)

mysql

僅以過(guò)程化樣式:由mysqli_connect()mysqli_init() 返回的 mysqli 對(duì)象。

option

指定的選項(xiàng),可以是下列中的某一值:

Valid options
Name Description
MYSQLI_STORE_RESULT_COPY_DATA 將結(jié)果集從 mysqlnd 的內(nèi)部緩沖區(qū)復(fù)制到 PHP 變量中。 默認(rèn)情況下,mysqlnd 采取一種引用策略盡量避免在內(nèi)容中復(fù)制多份同樣的結(jié)果集。 例如,對(duì)于一個(gè)包含了很多行的結(jié)果集,每個(gè)行中的內(nèi)容又不是很大,那么復(fù)制結(jié)果集的過(guò)程會(huì)導(dǎo)致內(nèi)存使用率下降, 因?yàn)橛脕?lái)保存結(jié)果集數(shù)據(jù)的 PHP 變量可能提前被釋放掉。 (此選項(xiàng)僅在使用 mysqlnd 驅(qū)動(dòng)且 PHP 5.6.0 之后可用)。

返回值

成功則返回一個(gè)緩沖的結(jié)果集對(duì)象,失敗則返回 false。

注意:

如果上一查詢并不產(chǎn)生結(jié)果集(例如,執(zhí)行了一個(gè) INSERT 語(yǔ)句), 那么 mysqli_store_result() 會(huì)返回 false。 如果讀取結(jié)果集失敗了,也會(huì)返回 false。 如何區(qū)分是上面哪種情況導(dǎo)致此函數(shù)的調(diào)用返回了 false? 你可以通過(guò)下面的方法來(lái)檢測(cè): mysqli_error() 返回了非空的字符串, mysqli_errno() 返回了非零值, 或者 mysqli_field_count() 返回了非零值, 都表示發(fā)生錯(cuò)誤了。 還有一種可能的情況會(huì)導(dǎo)致此函數(shù)的調(diào)用返回 false:上一次查詢 mysqli_query() 本身是成功的, 但是由于返回的結(jié)果集太大,無(wú)法為其分配足夠的內(nèi)存來(lái)進(jìn)行結(jié)果集轉(zhuǎn)移。 如果 mysqli_field_count() 函數(shù)返回了一個(gè)非零值,那么表示 SQL 語(yǔ)句產(chǎn)生了一個(gè)非空的結(jié)果集。

注釋

注意:

執(zhí)行查詢之后, 使用 mysqli_free_result() 函數(shù)來(lái)釋放結(jié)果集所占用的內(nèi)存, 是一個(gè)很有用的實(shí)戰(zhàn)經(jīng)驗(yàn)。 尤其是當(dāng)使用 mysqli_store_result() 函數(shù)來(lái)轉(zhuǎn)移數(shù)量較大的結(jié)果集的時(shí)候, 釋放結(jié)果集內(nèi)存的操作尤為重要。

范例

See mysqli_multi_query().

參見(jiàn)