我试图调用一个MS SQL存储过程表单php。
我已经在管理工作室中使用硬编码参数测试了存储过程,并且能够使用预期结果执行存储过程。
然而,当尝试从php调用它时,我得到了这些错误。
警告:mssql_execute()[function.mssql-execute]:第145行的C:\ xampp \ htdocs \ index.php中的存储过程执行失败
致命错误:第146行的C:\ xampp \ htdocs \ index.php超出了60秒的最长执行时间
我发布第145行的代码中的是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 :(得分:2)
错误是说您的存储过程运行时间超过60秒。默认情况下,PHP在60秒时超时(这在php.ini中使用mysql.connect_timeout设置为秒)
您应该尝试在SQL查询分析器中手动运行该过程,并使用与其超时相同的值,并查看它需要多长时间。例如,如果文件是服务器上的c:\ temp \ 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时,任何\字符必须转义为\。
这将运行相同的命令,并打印前后的时间。然后你可以看到它需要多长时间。如果您不确定要使用的值,请在mysql_execute()命令之前将PHP页面打印出来,然后将它们插入查询分析器中。
当您知道需要多长时间后,您可以将程序的超时时间调整为60秒以上。另一种方法是优化存储过程(如果可能),或者运行较小的CSV批次(如果可以)。请注意,在增加60秒查询超时后,您可能会遇到其他超时。例如,PHP本身将在PHP.ini中的max_execution_time中设置超时。 Apache的默认超时时间为300(5分钟)。因此,当你增加一个超时时,你可能遇到另一个超时并且必须增加它。
解决此问题的另一种方法是在命令行模式下从shell脚本或批处理文件或其他东西运行PHP。这可以让你了解大部分超时(至少Apache,PHP)。
答案 1 :(得分:0)
您实际上想要在php.ini文件中查找mssql.timeout
值。或者,如果它没有设置它。 default is 60 (seconds)这就是你要打的。