我有一个执行多个sql脚本的PHP文件。我发现前两个脚本执行,但最后两个脚本似乎永远不会完成。我在他们自己的PHP文件中单独测试了最后两个脚本并且脚本工作,所以我想知道是不是因为我在PHP脚本中进行的exec()调用次数。有什么建议?这是原始剧本:
<?php
session_start();
$host = "localhost";
$user = "user";
$pass = "pass";
$database = "database";
$linkID = mysql_connect($host, $user, $pass) or die("Could not connect to host.");
mysql_select_db($database, $linkID) or die("Could not find database.");
$query = sprintf("SELECT dbName FROM users where userName='%s'",
$_SESSION['MM_Username']);
$resultID = mysql_query($query) or die("Data not found.");
list($dbName)= mysql_fetch_row($resultID);
exec("mysql -u user -ppassword ".$dbName." < ../scripts/makeTblFinalAnalysis.sql");
exec("mysql -u user -ppassword ".$dbName." < ../scripts/tblFinalDetailed.sql");
exec("mysql -u user -ppassword ".$dbName." < ../scripts/TblGridViews.sql");
exec("mysql -u user -ppassword ".$dbName." < ../scripts/makeTblGeo.sql");
header( 'Location: dashboards/dashboard.html' ) ;
exit;
?>
答案 0 :(得分:3)
你可能会用完执行时间吗?脚本需要运行多长时间?
在PHP文档中查找set_time_limit()
;如果他们需要一段时间来运行,你会想要提高PHP执行超时。
答案 1 :(得分:1)
“但最后两个似乎永远不会完成。”也许是因为前两个脚本上的一些锁定,第三个脚本是死锁的?您可以尝试在sql服务器上一起执行这些脚本,以检查它是否成功执行并提交更改。同时发布sql查询可能会有所帮助。
答案 2 :(得分:0)
尝试将所有exec加入shell脚本并运行它。然后尝试在后台运行它。但是PHP不会等待脚本返回。
exec("nohup sqlRoutines.sh > /dev/null 2>&1 &");
这将从调用进程中分离脚本,并将stdout和stderr重定向到无处(或者如果你想要的话,还是logfile)。