(PHP 5, PHP 7, PHP 8)
mysqli::store_result -- mysqli_store_result — 轉(zhuǎn)移上一次查詢返回的結(jié)果集
面向?qū)ο箫L(fēng)格
過程化風(fēng)格
遷移 link
參數(shù)所指定的連接上的上一次查詢返回的結(jié)果集,
遷移之后的結(jié)果集可以
在 mysqli_data_seek() 函數(shù)中使用。
mysql
僅以過程化樣式:由mysqli_connect() 或 mysqli_init() 返回的 mysqli 對象。
option
指定的選項,可以是下列中的某一值:
Name | Description |
---|---|
MYSQLI_STORE_RESULT_COPY_DATA |
將結(jié)果集從 mysqlnd 的內(nèi)部緩沖區(qū)復(fù)制到 PHP 變量中。 默認(rèn)情況下,mysqlnd 采取一種引用策略盡量避免在內(nèi)容中復(fù)制多份同樣的結(jié)果集。 例如,對于一個包含了很多行的結(jié)果集,每個行中的內(nèi)容又不是很大,那么復(fù)制結(jié)果集的過程會導(dǎo)致內(nèi)存使用率下降, 因為用來保存結(jié)果集數(shù)據(jù)的 PHP 變量可能提前被釋放掉。 (此選項僅在使用 mysqlnd 驅(qū)動且 PHP 5.6.0 之后可用)。 |
成功則返回一個緩沖的結(jié)果集對象,失敗則返回 false
。
注意:
如果上一查詢并不產(chǎn)生結(jié)果集(例如,執(zhí)行了一個 INSERT 語句), 那么 mysqli_store_result() 會返回
false
。 如果讀取結(jié)果集失敗了,也會返回false
。 如何區(qū)分是上面哪種情況導(dǎo)致此函數(shù)的調(diào)用返回了false
? 你可以通過下面的方法來檢測: mysqli_error() 返回了非空的字符串, mysqli_errno() 返回了非零值, 或者 mysqli_field_count() 返回了非零值, 都表示發(fā)生錯誤了。 還有一種可能的情況會導(dǎo)致此函數(shù)的調(diào)用返回false
:上一次查詢 mysqli_query() 本身是成功的, 但是由于返回的結(jié)果集太大,無法為其分配足夠的內(nèi)存來進(jìn)行結(jié)果集轉(zhuǎn)移。 如果 mysqli_field_count() 函數(shù)返回了一個非零值,那么表示 SQL 語句產(chǎn)生了一個非空的結(jié)果集。
注意:
執(zhí)行查詢之后, 使用 mysqli_free_result() 函數(shù)來釋放結(jié)果集所占用的內(nèi)存, 是一個很有用的實戰(zhàn)經(jīng)驗。 尤其是當(dāng)使用 mysqli_store_result() 函數(shù)來轉(zhuǎn)移數(shù)量較大的結(jié)果集的時候, 釋放結(jié)果集內(nèi)存的操作尤為重要。
See mysqli_multi_query().