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

Posted

技术标签:

【中文标题】使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值【英文标题】:PHP call stored procedure with MSSQL_Query from SQL server 2012 return invalid value 【发布时间】:2017-04-05 13:08:55 【问题描述】:

我有一个从 MSSQL 调用存储过程的 php 文件。存储过程计算值并存储到临时表中。当我像这样从 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());

返回值只有“::”,没有整数。

当我在 T-Sql 中运行存储过程时,它返回正确的值 '02:15:00' T-SQL output

我使用的是 PHP 5.3.3。我需要升级我的php吗?或者为什么我无法在 PHP 中正确显示该值?

我无法控制存储过程。但我需要将结果显示到我的 php 页面中。然而,结果并不完全。有些值正在返回,有些则没有。 SELECT 语句中计算量大的值在 PHP 页面中显示有问题。喜欢

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'

这只会将 :: 返回到我的 mssql_query。 有人遇到过类似的问题吗?

请指教。谢谢

【问题讨论】:

我只需要显示是否从存储过程返回。但是php不能显示所有的返回值。 【参考方案1】:

为什么不使用 CONVERT?

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

【讨论】:

以上是关于使用 SQL Server 2012 中的 MSSQL_Query 的 PHP 调用存储过程返回无效值的主要内容,如果未能解决你的问题,请参考以下文章

使用mss2sql将SqlServer转换为Mysql

SQL Server2012中的Throw语句尝试 RAISERROR和THROW比较

Visual Studio 2012 中的 Sql Server ce 问题

提高 sql server 2012 中的视图性能

SQL server 2005 的简单语句

SQL Server2012在软件开发中的一些新特性