亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我如何存儲/序列化 php 返回的 mysqli_query 結果?

我如何存儲/序列化 php 返回的 mysqli_query 結果?

PHP
翻閱古今 2023-09-30 15:23:13
我試圖將從 mysqli_query 返回的結果存儲為緩存,因此,如果執行相同的“SELECT”語句,它將從緩存中獲取而不是通過 mysql 服務器,但無論我嘗試使用序列化/json_encode 執行什么操作,都將使用以下代碼,解碼甚至只是將輸出存儲為變量,我做不到        $row = $this->result->fetch_object();代碼如下。有誰知道為什么?如何存儲返回的結果并重新使用它?它不適用于 $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貢獻1877條經驗 獲得超1個贊

您存儲對象的時間不應mysqli_result超過獲取數據所需的時間。它僅用作從 MySQL 獲取數據的臨時對象。而是緩存值。


if (isset($dbcache[$query])) {

    $this->result = $dbcache[$query];

} else {

    $dbcache[$query] = $this->result = $dbh->query($query)->fetch_all(MYSQLI_ASSOC);

}

但是,我對這種方法對于準備好的語句的有用性持謹慎態度。您可能希望將鍵設為查詢和參數的組合。例如:


$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);

}

您確實應該避免在應用程序代碼中使用 mysqli 函數。如果您正在構建某種抽象層,那么您應該只將數據返回到應用程序并僅在內部使用 mysqli。使用我推薦的方法,您將像普通數組一樣訪問數據;沒有更多的fetch_object()方法了。當然,這需要您更改應用程序代碼,但這樣做是個好主意。我還強烈建議開始使用 PDO。


查看完整回答
反對 回復 2023-09-30
  • 1 回答
  • 0 關注
  • 104 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號