简体   繁体   English

PHP调用存储过程与SQL Server 2012中的MSSQL_Query返回无效值

[英]PHP call stored procedure with MSSQL_Query from SQL server 2012 return invalid value

I have a PHP file which calls Stored Procedure from MSSQL. 我有一个PHP文件从MSSQL调用存储过程。 The stored procedure calculate the value and store into a temp table. 存储过程计算该值并存储到临时表中。 When I call the stored procedure from PHP like this 当我像这样从PHP调用存储过程时

$cmd="exec get_value ".implode(",",$parameter_arr);
$result = mssql_query("SET ANSI_NULLS ON;");
$result = mssql_query("SET ANSI_WARNINGS ON;"); 
$result= mssql_query($cmd,$conn) or die("Error :".mssql_get_last_message());

The value return was only "::" without integer number. 值返回仅为“::”而没有整数。

When I run the stored procedure in T-Sql, it returns the correct value '02:15:00' T-SQL output 当我在T-Sql中运行存储过程时,它返回正确的值'02:15:00'T -SQL输出

I am using PHP 5.3.3. 我使用的是PHP 5.3.3。 Do I need to upgrade my php? 我需要升级我的PHP吗? Or why I cannot display the value correctly in PHP? 或者为什么我无法在PHP中正确显示值?

I have no control over the stored procedure. 我无法控制存储过程。 But I need to display the result into my php page. 但我需要将结果显示在我的php页面中。 However, the result come incompletely. 但是,结果不完整。 Some values are returning and some are not. 有些值正在返回,有些则没有。 Those value with heavy calculation in SELECT statement has problem displaying in PHP page. SELECT语句中计算量大的那些值在PHP页面中显示有问题。 Like 喜欢

SELECT CASE WHEN LEN(CONVERT(VARCHAR,CONVERT(INT,ETS_PhoneHours*1.0))) = 1 THEN '0' + CONVERT(VARCHAR,CONVERT(INT,ETS_PhoneHours*1.0)) ELSE CONVERT(VARCHAR,CONVERT(INT,ETS_PhoneHours*1.0)) END + ':' 
               + CASE WHEN LEN(CONVERT(VARCHAR,CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60) )) = 1 THEN '0' + CONVERT(VARCHAR,CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60) ) ELSE CONVERT(VARCHAR,CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60) ) END + ':' 
               + CASE WHEN LEN(SUBSTRING(CONVERT(VARCHAR,CONVERT(INT,((ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60 - CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60))*60)),1,2)) = 1 THEN  '0' + SUBSTRING(CONVERT(VARCHAR,CONVERT(INT,((ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60 - CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60))*60)),1,2) ELSE SUBSTRING(CONVERT(VARCHAR,CONVERT(INT,((ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60 - CONVERT(INT,(ETS_PhoneHours*1.0 - CONVERT(INT,ETS_PhoneHours*1.0))*60))*60)),1,2) END
      AS 'ETS_Program_Hours'

This will only return :: to my mssql_query. 这只会返回::到我的mssql_query。 Anyone face the similar issue before? 以前有人面临过类似的问题吗?

Please advice. 请指教。 Thanks 谢谢

你为什么不用CONVERT?

SELECT CONVERT(nvarchar(40),ETS_PhoneHours,108) AS 'ETS_Program_Hours'

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM