2011-10-17 6 views
2

MS SQL 저장 프로 시저 양식을 호출하려고합니다.PHP에서 MSSQL 저장 프로 시저 실행

하드 코딩 된 매개 변수가있는 관리 Studio에서 저장 프로 시저를 자체적으로 테스트하여 예상 결과와 함께 실행할 수있었습니다.

그러나 PHP에서 호출하려고하면 이러한 오류가 발생합니다.

경고 : mssql_execute() [function.mssql-실행] 프로 시저의 실행이 실패 C : \ XAMPP \ htdocs를 \ index.php를 라인 (145)

치명적인 오류 : 초과 60 초 최대 실행 시간 C : \ xampp \ htdocs \ index.php on line 146

코드에 mssql_execute 명령을 게시하고 있습니다.

어떤 도움을 주시면 감사하겠습니다.

$userQuery = "select top 1 id from bravo_biometric_batch order by id desc"; 
    $result = mssql_query($userQuery,$DB); 
    $bravo_biometric_batch_id = mssql_result($result,0,0); 

    $company_year_id = 237; 
    $date = date("Ymd"); 
    $server_file_name = "e:\\bravo_csv\\".$filename; 

    $csv_proc_name = mssql_init('bulk_insert_bravo_csv',$DB); 
    mssql_bind($csv_proc_name, '@data_csv_file',$server_file_name,SQLVARCHAR, false,false,200); 
    mssql_bind($csv_proc_name, '@bravo_biometric_batch_id',$bravo_biometric_batch_id, SQLINT2, false,false, 10); 
    mssql_bind($csv_proc_name, '@company_year_id',$company_year_id, SQLINT2, false,false,10); 
    mssql_bind($csv_proc_name, '@upload_date',$date, SQLVARCHAR, false,false,20); 

    mssql_execute($csv_proc_name); 
+0

오류에 대해 더 자세히 알아 보려면 실행 행 뒤의 echo mssql_get_last_message(). 세부 사항으로 다시 게시하십시오. http://www.php.net/manual/en/function.mssql-get-last-message.php – Jrod

+0

타임 아웃 오류 메시지를 추가했지만 새로운 오류 정보를받지 못했습니다. –

답변

2

오류는 저장 프로 시저가 실행되는 데 60 초 이상 걸리는 중입니다. 기본적으로 PHP는 60 초에 시간 초과됩니다 (이것은 mysql.connect_timeout을 사용하여 php.ini에서 초 단위로 설정됩니다)

시간 제한과 동일한 값으로 SQL 쿼리 분석기에서 수동으로 프로 시저를 실행 해보십시오 , 소요 시간을 확인하십시오. 파일이 C 인 경우 예를 들어, : 서버에서 \ 임시 \의 csvfile.csv, 배치 ID 1234, 회사는 2011 년 날짜의 현재 시간, 당신은 사용하십시오 :

print 'Start time: ' + getdate() 
exec 'bulk_insert_bravo_csv' 'c:\\temp\\csvfile.csv', 1234, 2011, getdate() 
print 'End time: ' + getdate() 

주를이 쿼리 분석기에서 SQL을 실행할 때 \는 \로 이스케이프되어야합니다.

동일한 명령을 실행하고 앞뒤 시간을 인쇄합니다. 그런 다음 얼마나 오래 걸리는지 볼 수 있습니다. 사용할 값을 모를 경우 PHP 페이지에서 mysql_execute() 명령 전에 출력 한 다음 쿼리 분석기에 연결하십시오.

걸리는 시간을 알면 절차의 시간 초과를 60 초 이상으로 조정할 수 있습니다. 또 다른 방법은 가능한 경우 저장 프로 시저를 최적화하거나 가능한 경우 더 작은 CSV 배치를 실행하는 것입니다. 60 초 쿼리 제한 시간을 늘린 후에는 다른 시간 초과가 발생할 수 있습니다. 예를 들어, PHP 자체는 PHP.ini의 max_execution_time에 타임 아웃을 설정합니다. Apache의 기본 제한 시간은 300 (5 분)입니다. 한 번의 시간 초과를 늘리면 다른 것을 실행하여 늘려야합니다.

이 문제를 해결하는 또 다른 방법은 PHP를 명령 줄 모드로 실행하거나 쉘 스크립트 나 배치 파일 등에서 실행하는 것입니다. 대부분의 시간 초과 (Apache, PHP 이상)에 대해 알려줍니다.

+0

당신의 모든 답변을 주셔서 감사합니다. 나는 며칠 동안 그 문제를 해결했습니다. 나는 PHP 변수로 execute를 설정했다. $ userquery = "storedproc $ var1, $ var2 ... 실행"그런 다음 mssql_query ($ userquery, $ db)를 사용하여 initlize 및 모든 매개 변수를 바인드하지 않고도 작업 할 수있었습니다. 모든 응답자에게 감사의 말을 전합니다. –

0

실제로 php.ini 파일에서 mssql.timeout 값을 찾고 싶습니다. 아니면 거기에 있지 않으면 설정하십시오. default is 60 (seconds)은 당신이 쳤던 것입니다.

관련 문제