MSSQL过程 - 来自SQL studio和PHP

时间:2016-05-23 10:43:22

标签: php sql-server-2008 stored-procedures

我有一个带有三个输入参数和一个输出的程序。如果我在SQL Studio中调用过程,我会得到除以零的错误。但是,如果我在PHP中调用过程,我得到数据,除以零,我得到零。除数为零的消息是可以的。这真的发生了。我不明白PHP如何获得结果而SQL Studio没有。

如果我在Studio中调用过程

USE [TEST_ESHOP]
GO

DECLARE @return_value int,
        @O_ERRMSG varchar(1000)

EXEC    @return_value = [proc].[czES_KONF_KALK_VELICINA_Seznam]
        @LI_KALK_ID = 12000,
        @LI_VYBFILTRY = N'DEFAULT',
        @LI_VYBVELICINY = N'" "',
        @O_ERRMSG = @O_ERRMSG OUTPUT

SELECT  @O_ERRMSG as N'@O_ERRMSG'

SELECT  'Return Value' = @return_value

GO

我收到消息

" Msg 8134,Level 16,State 1,Procedure czES_KONF_KALK_VELICINA_Seznam,96行 遇到零错误。"

这没关系。在程序中这些参数确实被零除。

但是如果我在PHP中调用prodecure就像:

$link = mssql_connect ('host', 'user', 'pass');

if (!$link)
{
    die('mssql_connect - error');
}
else
{
    echo ('mssql_connect - OK');    
}

$db = mssql_select_db ('TEST_ESHOP', $link);

if (!$db)
{
    die('mssql_select_db - error');
}
else
{
    echo (', mssql_select_db - OK');    
}

$init = mssql_init('proc.czES_KONF_KALK_VELICINA_Seznam', $link);

$kalkId = "12000";
$fil = "DEFAULT";
$vel = " ";
$out = "errMsg";

mssql_bind($init, "@LI_KALK_ID", $kalkId, SQLINT4, FALSE);

mssql_bind($init, "@LI_VYBFILTRY", $fil, SQLVARCHAR, FALSE);

mssql_bind($init, "@LI_VYBVELICINY", $vel, SQLVARCHAR, FALSE);

mssql_bind($init, '@O_ERRMSG', $out, SQLVARCHAR, TRUE);

$result = mssql_execute($init);

$help = array();

while ($row = mssql_fetch_assoc($result))
{
    $help[] = $row;
}

var_dump($result);

mssql_close($link);

die;

我得到的结果是"资源(4,mssql结果)"在mssql_fetch_assoc之后,我得到数据的数组($ help)。

  0 => 
    array (size=9)
      'VEL_ID' => int 85
      'VEL_NAZEV' => name' (length=4)
      'MJ' => string 'm2' (length=2)
      'TYP' => string 'numeric' (length=7)
      'JEN_PRO_CTENI' => int 0
      'NEVIDITELNA' => int 0
      'HODNOTA' => string '0.000000' (length=8)
      'POCITANA_VELICINA' => int 0
      'POZNAMKA' => text' (length=4)
  1 => 
    array (size=9)
      'VEL_ID' => int 2
      'VEL_NAZEV' => name' (length=4)
      'MJ' => string 'bm' (length=2)
      'TYP' => string 'numeric' (length=7)
      'JEN_PRO_CTENI' => int 0
      'NEVIDITELNA' => int 0
      'HODNOTA' => string '0.000000' (length=8)
      'POCITANA_VELICINA' => int 0
      'POZNAMKA' => text' (length=4)

Line"' HODNOTA' =>字符串' 0.000000' (长度= 8)&#34 ;. 该行由公式计算,其中除以零。 PHP可以得到结果并显示0.00000而SQL Studio没有。

在PHP Profiler中,当PHP调用该过程时也将其除以零。知道这是怎么可能的吗?

0 个答案:

没有答案