我有一个带有三个输入参数和一个输出的程序。如果我在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调用该过程时也将其除以零。知道这是怎么可能的吗?