2009-05-22 3 views
1

複数のSQLスクリプトを実行するPHPファイルがあります。最初の2つのスクリプトは実行されていますが、最後の2つのスクリプトは完了していないようです。最後の2つのスクリプトをそれぞれのPHPファイルで個別にテストし、スクリプトが動作したので、PHPスクリプトでexec()呼び出しを行った回数が原因であるかどうか疑問に思っています。助言がありますか?オリジナルのスクリプトは次のとおりです。初心者質問 - 複数の.sqlスクリプトをPHPファイルに呼び出す

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

答えて

3

実行時間を使い果たしている可能性がありますか?スクリプトの実行にどれくらいの時間がかかりますか?

PHPドキュメントのset_time_limit()を参照してください。実行に時間がかかる場合は、PHPの実行タイムアウトを引き上げることになります。

+0

デフォルトのmax_execution_timeは約60秒です。だから、あなたのスクリプトの合計時間が長くかかる場合、それは問題の可能性があります。 – bumperbox

+0

私はset_time_limitを追加しましたが、それでも動作しません。 –

1

"最後の2つは決して完了しないようです。"おそらく、最初の2つのスクリプトのいくつかのロックのために、3番目のスクリプトはデッドロックされていますか?これらのスクリプトをすべてSQLサーバー上で一緒に実行して、正常に実行され、変更がコミットされているかどうかを確認することができます。また、SQLクエリを投稿すると役立つかもしれません。

0

すべてのexecをシェルスクリプトに参加させて実行してみてください。次に、バックグラウンドで実行してみてください。しかし、PHPはスクリプトの復帰を待ちません。

exec("nohup sqlRoutines.sh > /dev/null 2>&1 &"); 

これは(...またはしたい場合はログファイルする)プロセスを呼び出してからスクリプトを切り離し、どこにstdoutとstderrをリダイレクトします。

+0

私はこれを試してみたいが、私のスクリプトは30秒未満で実行されていた。申し訳ありませんが、私はシェルスクリプトにあまり慣れていません。シェルスクリプトで4 execコマンドを実行するには、コマンドは何をする必要がありますか? –