簡體   English   中英

php+mysql 如何防止重新執行查詢

[英]how to prevent from re-executing a query php+mysql

我正在學習 PHP 和 MySQL。 我決定玩一點,我制作了一個動態 -ish 頁面,我用 MySQL 和 if 循環實現了它(我不在乎它是否值得,只是為了好玩)。

代碼看起來像這個例子:

mysqli_query($conn,"UPDATE something SET something = something + 1 WHERE id = " . $_GET['id']

   if(mysqli_num_rows($result) > 0){
    while($row = mysqli_fetch_assoc($result)){
  echo table;
    }
    }

每次有人點擊子頁面上的鏈接時,它都會將 $_GET['id'] 傳遞給上面的代碼。 一切正常,但是......但是在刷新頁面后,帶有 UPDATE 語句的查詢是“重新執行”(我不知道它是否正確 - 英語不是我的母語)和標題('位置:')不起作用......它只顯示“找不到頁面”。

有什么辦法可以防止刷新后重新執行查詢?

您需要添加某種邏輯以確保 MySQL 僅觸發一次,並使此條件邏輯通過頁面重新加載保持不變。 有很多方法可以做到這一點(例如使用 cookie 或$_SESSION標志,但我個人建議對數據庫進行查詢。這種方法將確保代碼只能運行一次,無論哪個用戶在哪台機器上試圖運行它。

這在以下偽代碼中說明:

mysqli_query($conn, "SELECT something WHERE id = " . $_GET['id']);
if(mysqli_num_rows($result) === 0) { /* Check that the code hasn't run yet */
    mysqli_query($conn, "UPDATE something SET something = something + 1 WHERE id = " . $_GET['id'])
    if(mysqli_num_rows($result) > 0) {
        while($row = mysqli_fetch_assoc($result)){
           echo table;
        }
    }
}
<?php
    session_start(); //you call this to use session variables

   if(isset($_SESSION['details']) && $_SESSION['details']==true)
   { /*do nothing since query has ran once*/}
   else
   {
    /*run query since query has not been run*/
    mysqli_query($conn,"UPDATE something SET something = something + 1 WHERE id = " .$_GET['id'];
     $_SESSION['details']=true; //you set a session variable to true when query runs the first time.
    }

    /*i am assuming there is a select statement here that retruns the **$result** */
    if(mysqli_num_rows($result) > 0)
    {
     while($row = mysqli_fetch_assoc($result))
     {
      echo table;
     }
    }
 ?>

防止頁面刷新重復操作(數據庫或其他)的常用方法是重定向到另一個頁面以顯示結果。

用戶單擊鏈接或提交表單等,然后轉到執行該工作的頁面。 該頁面完成后,將重定向標題發送到將顯示操作結果的頁面。 如果用戶刷新,他們只會再次獲得結果頁面。

$_SESSION 通常用於將結果從操作頁面獲取到結果頁面,或者結果頁面可能會運行它自己的“SELECT”查詢。

另一種常用的方法是使用 AJAX 調用頁面執行操作並返回結果。 在這種情況下,當前頁面保持不變,刷新不會導致執行該操作的頁面再次運行。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM