(PHP 5, PHP 7, PHP 8)
mysqli::store_result -- mysqli_store_result — 轉(zhuǎn)移上一次查詢返回的結(jié)果集
面向?qū)ο箫L(fēng)格
過(guò)程化風(fēng)格
遷移 link
參數(shù)所指定的連接上的上一次查詢返回的結(jié)果集,
遷移之后的結(jié)果集可以
在 mysqli_data_seek() 函數(shù)中使用。
mysql
僅以過(guò)程化樣式:由mysqli_connect() 或 mysqli_init() 返回的 mysqli 對(duì)象。
option
指定的選項(xiàng),可以是下列中的某一值:
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().