1 回答

TA貢獻1921條經(jīng)驗 獲得超9個贊
mysqli_result()mysqli從 MySQL 獲取結(jié)果后,既不需要連接到 MySQL,也不需要對象。
注意:以上內(nèi)容僅適用于緩沖查詢。如果您使用無緩沖的結(jié)果集,則mysqli_result需要打開 mysqli 連接來獲取數(shù)據(jù),否則您將收到一條錯誤消息:
PHP 警告:mysqli_result::fetch_all():讀取行時出錯...
但是,只有在使用無緩沖查詢時關(guān)閉連接時,才會出現(xiàn)此錯誤消息。例如
$res = $mysqli->query('SELECT id FROM Users LIMIT 1', MYSQLI_USE_RESULT);
$mysqli->close();
$res->fetch_all();
盡管mysqli_result在創(chuàng)建它的實例時需要有效的連接,但它只需要該連接來獲取數(shù)據(jù)。中的第二個參數(shù)用于mysqli_result::__construct()決定結(jié)果集是應該在 PHP 中緩沖還是存儲在 MySQL 服務器上并逐行獲取。當您創(chuàng)建 的實例時,mysqli_result需要將 的實例mysqli作為第一個參數(shù)傳遞。
// Execute query on MySQL server
$res = $mysqli->real_query('SELECT id FROM Users LIMIT 1');
// Create the result object.?
// The second argument can be MYSQLI_STORE_RESULT for buffered result or MYSQLI_USE_RESULT for unbuffered.
$res = new mysqli_result($mysqli, MYSQLI_STORE_RESULT);
// If MYSQLI_STORE_RESULT was used then you can close mysqli here.
unset($mysqli); // or $mysqli->close(); or both
$data = $res->fetch_all();
// If MYSQLI_USE_RESULT was used then you can't close mysqli yet.
// unset($mysqli);
$data = $res->fetch_all();
SQL 查詢的緩沖是一項相當復雜的任務,最好避免重復調(diào)用,而不是實現(xiàn)緩存。SELECT嘗試重構(gòu)您的代碼,以便在腳本執(zhí)行期間不會多次調(diào)用相同的查詢。
還有一個預制的解決方案,盡管不是很受歡迎。Mysqlnd查詢結(jié)果緩存插件
一如既往地記?。?/p>
過早的優(yōu)化是萬惡之源
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報