如何防止重新执行查询php + mysql

时间:2018-09-06 00:03:50

标签: 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语句的查询“正在重新执行”(我不知道它是否正确-英语不是我的母语)和标头('Location:')不起作用...显示的只是“找不到页面”。

有什么方法可以防止刷新后重新执行查询?

3 个答案:

答案 0 :(得分:1)

您需要添加某种逻辑,以确保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;
        }
    }
}

答案 1 :(得分:1)

<?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;
     }
    }
 ?>

答案 2 :(得分:0)

防止页面刷新重复执行某个操作(数据库或其他操作)的一种常用方法是重定向到另一个页面以显示结果。

用户单击链接或提交表单等,该链接会转到执行该任务的页面。该页面完成后,会将重定向标头发送到将显示操作结果的页面。如果用户刷新,他们只会再次获得结果页面。

$ _ SESSION通常用于从操作页面到结果页面获取结果,或者结果页面可以运行它自己的“ SELECT”查询。

另一种常见方法是使用AJAX调用该页面以执行操作并返回结果。在这种情况下,当前页面保持不变,并且刷新不会导致执行该操作的页面再次运行。