有没有办法让mysql_query脚本在访问php网站30秒后执行。
这将是一个移动设备,特别是Android设备。在我的用户点击提交后,我希望mysql_query脚本在30秒后运行。
答案 0 :(得分:1)
直接否,因为PHP是基于请求的,这意味着在请求之后不再运行任何东西。
但是,您可以创建某种队列(例如在数据库中)并让后台工作程序处理队列。这可能是一个每分钟由一个cron作业调用的PHP脚本(但它可能会在60秒后执行,但很容易实现)或者在后台运行的服务器上的守护程序(硬件(呃)实现并且你需要访问权限)到服务器)。
答案 1 :(得分:1)
您可以使用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);
});
答案 2 :(得分:0)
你不需要那个。
执行带有延迟的SQL查询没有一个理由
马上运行吧。
答案 3 :(得分:0)
我认为您需要使用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专家,这只是我的头脑。
答案 4 :(得分:0)
此处提出的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 :(得分:0)
如何重新考虑问题 - 您希望能够找到30秒前点击按钮的所有用户吗?
您无需等待30秒即可执行查询:当他们单击按钮时,您立即执行SQL查询,并更新用户表上的一个名为time_clicked的字段。
然后,您可以通过执行查询找到所需的用户:
<?php
mysql_query("SELECT * FROM users where time_clicked < '" .
date('Y-m-d h:i:s',strtotime('-30 seconds')) . "'");
?>