1 回答

TA貢獻(xiàn)1877條經(jīng)驗(yàn) 獲得超1個(gè)贊
您存儲(chǔ)對(duì)象的時(shí)間不應(yīng)mysqli_result超過獲取數(shù)據(jù)所需的時(shí)間。它僅用作從 MySQL 獲取數(shù)據(jù)的臨時(shí)對(duì)象。而是緩存值。
if (isset($dbcache[$query])) {
$this->result = $dbcache[$query];
} else {
$dbcache[$query] = $this->result = $dbh->query($query)->fetch_all(MYSQLI_ASSOC);
}
但是,我對(duì)這種方法對(duì)于準(zhǔn)備好的語句的有用性持謹(jǐn)慎態(tài)度。您可能希望將鍵設(shè)為查詢和參數(shù)的組合。例如:
$key = serialize([$query, ...$params]);
if (isset($dbcache[$key])) {
$this->result = $dbcache[$key];
} else {
//prepare bind execute
$stmt = $dbh->prepare($query);
if ($params) {
$stmt->bind_param(str_repeat("s", count($params)), ...$params);
}
$stmt->execute();
// Fetch results into multidimensional array
$dbcache[$key] = $this->result = $stmt->get_result()->fetch_all(MYSQLI_ASSOC);
}
您確實(shí)應(yīng)該避免在應(yīng)用程序代碼中使用 mysqli 函數(shù)。如果您正在構(gòu)建某種抽象層,那么您應(yīng)該只將數(shù)據(jù)返回到應(yīng)用程序并僅在內(nèi)部使用 mysqli。使用我推薦的方法,您將像普通數(shù)組一樣訪問數(shù)據(jù);沒有更多的fetch_object()方法了。當(dāng)然,這需要您更改應(yīng)用程序代碼,但這樣做是個(gè)好主意。我還強(qiáng)烈建議開始使用 PDO。
- 1 回答
- 0 關(guān)注
- 101 瀏覽
添加回答
舉報(bào)