【发布时间】:2011-08-28 11:20:43
【问题描述】:
有没有办法让 mysql_query 脚本在访问 php 站点后执行 30 秒。
这将在移动设备上,特别是在 android 设备上。在我的用户点击提交后,我希望 mysql_query 脚本在 30 秒后运行。
【问题讨论】:
-
请修改您的原帖,不要重复!
有没有办法让 mysql_query 脚本在访问 php 站点后执行 30 秒。
这将在移动设备上,特别是在 android 设备上。在我的用户点击提交后,我希望 mysql_query 脚本在 30 秒后运行。
【问题讨论】:
直接不,因为 PHP 是基于请求的,这意味着在请求之后不再运行任何东西。
但是,您可以创建某种队列(例如在数据库中)并让后台工作人员处理队列。这可以是每分钟由 cron 作业调用的 PHP 脚本(但它可能会在 60 秒后执行,但易于实现)或在后台运行的服务器上的守护进程(难以实现并且您需要访问到服务器)。
【讨论】:
您可以使用 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);
});
【讨论】:
你不需要那个。
延迟执行 SQL 查询的原因不止一个。
立即运行即可。
【讨论】:
这里提出的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:我不明白你为什么需要它,也许你应该重新设计你的应用程序。
【讨论】:
我认为您需要为此使用 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 专家,这只是我的想法。
【讨论】:
重新思考这个问题怎么样 - 您希望能够找到所有在 30 秒前点击按钮的用户吗?
您无需等待 30 秒即可执行查询:当他们单击按钮时,您会立即执行 SQL 查询,并更新用户表中名为 time_clicked 之类的字段。
然后你可以通过执行查询找到你想要的用户:
<?php
mysql_query("SELECT * FROM users where time_clicked < '" .
date('Y-m-d h:i:s',strtotime('-30 seconds')) . "'");
?>
【讨论】: