【问题标题】:Get a mysql_query script to execute 30 seconds after visiting the php site [duplicate]访问php站点后获取mysql_query脚本执行30秒[重复]
【发布时间】:2011-08-28 11:20:43
【问题描述】:

可能重复:
Php mysql to do task after 30 seconds

有没有办法让 mysql_query 脚本在访问 php 站点后执行 30 秒。

这将在移动设备上,特别是在 android 设备上。在我的用户点击提交后,我希望 mysql_query 脚本在 30 秒后运行。

【问题讨论】:

  • 请修改您的原帖,不要重复!

标签: php android mysql


【解决方案1】:

直接不,因为 PHP 是基于请求的,这意味着在请求之后不再运行任何东西。

但是,您可以创建某种队列(例如在数据库中)并让后台工作人员处理队列。这可以是每分钟由 cron 作业调用的 PHP 脚本(但它可能会在 60 秒后执行,但易于实现)或在后台运行的服务器上的守护进程(难以实现并且您需要访问到服务器)。

【讨论】:

    【解决方案2】:

    您可以使用 javascript,例如使用 jQuery,这可能看起来像:

    $('#form').submit(function(e) {
        e.preventDefault(); // stop form from submitting when submit is clicked
            setTimeout(function() { // set a 30 second timer to make an ajax request to your php script
            $.ajax('mysqlscript.php');
        }, 30000);
    });
    

    【讨论】:

    • 只要 30 秒后用户仍在您的页面/应用程序上。
    【解决方案3】:

    你不需要那个。
    延迟执行 SQL 查询的原因不止一个。
    立即运行即可。

    【讨论】:

      【解决方案4】:

      这里提出的Javascript选项不安全,因为如果用户关闭浏览器,回调将永远不会执行。

      如果您确实需要在 30 秒后执行脚本,则不能使用 cron 作业,但如果您需要“稍后”执行,也可以。做一个守护进程是最好的选择,但它很难实现,也不是最“兼容”的选择。

      试试这个(我还没有测试过!!):不是进行简单的 AJAX 调用或完整的页面访问,而是在页面完成后进行另一个 AJAX 调用:

      // This is the page you load and 30 seconds after it is loaded you want to call mysql
      ....
      $(document).ready(function() {
         $.ajax({
           url: "callMYSQL.php",
           async: true
         });
      });
      

      当文档被加载时(如果你加载一个新页面,你通过 AJAX 调用它,你只需要调用 AJAX 两次),它会调用 callMYSQL.php。这个 PHP 文件必须等待 30 秒 (sleep(30)),然后再执行您需要的任何操作。

      注意:此解决方案需要您增加 PHP 脚本的存活时间。 注2:我不明白你为什么需要它,也许你应该重新设计你的应用程序。

      【讨论】:

        【解决方案5】:

        我认为您需要为此使用 Javascript。

        例如:使用 setTimeout() 函数。

        $query4=mysql_query("select id, price from pricelist where id='$result3[id]'");
        $result4=mysql_query($query4);
        
        // **Example:**
        function queryTimeout(){
          var t=setTimeout("doQuery()",30000);<br />
        }
        
        function doQuery(){
          $query4=mysql_query("select * from table");
          $result4=mysql_query($query4);
        }
        

        但我不是 javascript 专家,这只是我的想法。

        【讨论】:

        • 或者像user916336说的,你也可以使用AJAX。 :)
        【解决方案6】:

        重新思考这个问题怎么样 - 您希望能够找到所有在 30 秒前点击按钮的用户吗?

        您无需等待 30 秒即可执行查询:当他们单击按钮时,您会立即执行 SQL 查询,并更新用户表中名为 time_clicked 之类的字段。

        然后你可以通过执行查询找到你想要的用户:

        <?php
            mysql_query("SELECT * FROM users where time_clicked < '" .
                date('Y-m-d h:i:s',strtotime('-30 seconds')) . "'");
        ?>
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-06-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多