第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

我如何存儲(chǔ)/序列化 php 返回的 mysqli_query 結(jié)果?

我如何存儲(chǔ)/序列化 php 返回的 mysqli_query 結(jié)果?

PHP
翻閱古今 2023-09-30 15:23:13
我試圖將從 mysqli_query 返回的結(jié)果存儲(chǔ)為緩存,因此,如果執(zhí)行相同的“SELECT”語句,它將從緩存中獲取而不是通過 mysql 服務(wù)器,但無論我嘗試使用序列化/json_encode 執(zhí)行什么操作,都將使用以下代碼,解碼甚至只是將輸出存儲(chǔ)為變量,我做不到        $row = $this->result->fetch_object();代碼如下。有誰知道為什么?如何存儲(chǔ)返回的結(jié)果并重新使用它?它不適用于 $this->result = mysqli_query($dbh, $query);                global $dbcache;//                      $this->result = mysqli_query( $dbh, $query );                if (isset($dbcache[$query])){                        $this->result = json_decode($dbcache[$query]);//                        echo 'JSON? = '.$query.'<br>'.$dbcache[$query];                }else{//                      echo ' === '.$dbcache[$query].' === '."\n";                        $this->result = mysqli_query( $dbh, $query );                        //$dbcache[$query] = serialize($this->result);                        $dbcache[$query] = json_encode($this->result);//                      echo 'Serialize? = '.$query."\n".hash('sha3-512' , $query).'<br>';                }
查看完整描述

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。


查看完整回答
反對(duì) 回復(fù) 2023-09-30
  • 1 回答
  • 0 關(guān)注
  • 101 瀏覽

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)