1 回答

TA貢獻1921條經驗 獲得超9個贊
mysqli_result()mysqli從 MySQL 獲取結果后,既不需要連接到 MySQL,也不需要對象。
注意:以上內容僅適用于緩沖查詢。如果您使用無緩沖的結果集,則mysqli_result需要打開 mysqli 連接來獲取數據,否則您將收到一條錯誤消息:
PHP 警告:mysqli_result::fetch_all():讀取行時出錯...
但是,只有在使用無緩沖查詢時關閉連接時,才會出現此錯誤消息。例如
$res = $mysqli->query('SELECT id FROM Users LIMIT 1', MYSQLI_USE_RESULT);
$mysqli->close();
$res->fetch_all();
盡管mysqli_result在創建它的實例時需要有效的連接,但它只需要該連接來獲取數據。中的第二個參數用于mysqli_result::__construct()決定結果集是應該在 PHP 中緩沖還是存儲在 MySQL 服務器上并逐行獲取。當您創建 的實例時,mysqli_result需要將 的實例mysqli作為第一個參數傳遞。
// 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 查詢的緩沖是一項相當復雜的任務,最好避免重復調用,而不是實現緩存。SELECT嘗試重構您的代碼,以便在腳本執行期間不會多次調用相同的查詢。
還有一個預制的解決方案,盡管不是很受歡迎。Mysqlnd查詢結果緩存插件
一如既往地記?。?/p>
過早的優化是萬惡之源
- 1 回答
- 0 關注
- 111 瀏覽
添加回答
舉報