#24595 [Com]: Cannot bind output variables.

2003-08-06 Thread brian_caughlin at hotmail dot com
 ID:   24595
 Comment by:   brian_caughlin at hotmail dot com
 Reported By:  hans at velum dot net
 Status:   Open
 Bug Type: MSSQL related
 Operating System: Windows XP
 PHP Version:  5.0.0b1 (beta1)
 New Comment:

By the way, it looks like this bug may be a duplicate of Bug #21089. 
Perhaps this is simply an undocumented change.


Previous Comments:


[2003-08-05 12:20:15] brian_caughlin at hotmail dot com

I ran into this issue myself in 4.3.2, and found that the workaround is
to use the mssql_next_result() function before attempting to access the
retval and any output parameters.  I also found that I don't need to
pass the variables by reference.

Here is the code that works for me in 4.3.2:

?php 

$conn=mssql_connect(myhost,user,pwd); 

if ($conn) { 
mssql_select_db(mydb,$conn); 

$stmt=mssql_init(procedure,$conn); 
mssql_bind($stmt,RETVAL,$val,SQLINT4); 

$ival=11; 
$fval=2.1416; 
$sval=Frank; 

mssql_bind($stmt,@sval,$sval,SQLVARCHAR,TRUE); 
mssql_bind($stmt,@intval,$ival,SQLINT4,TRUE); 
mssql_bind($stmt,@floatval,$fval,SQLFLT8,TRUE); 

$result=mssql_execute($stmt); 

$arr=mssql_fetch_row($result); 
print (Answer:  . $arr[0] . 
 ); 
mssql_next_result($result);
print (RETVAL = $val ; intval = $ival ; floatval = $fval ; string =
$sval); 

mssql_close($conn); 
} 
else print(ooops!); 
?

I hope this helps!



[2003-07-10 14:38:29] hans at velum dot net

Yes, I verified that this is also happening with 4.3.2.  I thought,
based on a comment in the manual, that this was not an issue in the
4.3.2 release.

I also verified that the bound values are making it *into* the stored
procedure w/o incident.  (E.g. I can add them to the returned result
row to see that the stored procedure is aware of the values.)



[2003-07-10 12:52:15] [EMAIL PROTECTED]

Does this happen with PHP 4.3.2 ?




[2003-07-10 12:35:09] hans at velum dot net

Description:

When using mssql_bind() to bind an output variable, the variable is
passed into the stored procedure but the modified value is not
returned.  (The variable is being passed by reference to mssql_bind()).

Reproduce code:
---
I used the following user-contributed example from mssql_execute manual
page.


if we have this procedure: 

CREATE PROCEDURE [procedure] 
( 
  @sval varchar(50) OUTPUT, 
  @intval int OUTPUT, 
  @floatval decimal(6,4) OUTPUT 
) AS 

if @intval is null 
select '@intval is null' as answer 
else 
select '@intval is NOT null' as answer 

set @sval='Hello ' + @sval 
set @[EMAIL PROTECTED] 
set @[EMAIL PROTECTED] 

return 10 

We can use this PHP code: 

?php 

$conn=mssql_connect(myhost,user,pwd); 

if ($conn) { 
mssql_select_db(mydb,$conn); 

$stmt=mssql_init(procedure,$conn); 
mssql_bind($stmt,RETVAL,$val,SQLINT4); 

$ival=11; 
$fval=2.1416; 
$sval=Frank; 

mssql_bind($stmt,@sval,$sval,SQLVARCHAR,TRUE); 
mssql_bind($stmt,@intval,$ival,SQLINT4,TRUE); 
mssql_bind($stmt,@floatval,$fval,SQLFLT8,TRUE); 

$result=mssql_execute($stmt); 

$arr=mssql_fetch_row($result); 
print (Answer:  . $arr[0] . 
 ); 
print (RETVAL = $val ; intval = $ival ; floatval = $fval ; string =
$sval); 

mssql_close($conn); 
} 
else print(ooops!); 


Expected result:

Answer: @intval is NOT nullRETVAL = 10 ; intval = 12 ; floatval =
3.1416 ; string = Hello Frank

Actual result:
--
Answer: @intval is NOT nullRETVAL = 0 ; intval = 11 ; floatval = 2.1416
; string = Frank





-- 
Edit this bug report at http://bugs.php.net/?id=24595edit=1



#24595 [Com]: Cannot bind output variables.

2003-08-06 Thread brian_caughlin at hotmail dot com
 ID:   24595
 Comment by:   brian_caughlin at hotmail dot com
 Reported By:  hans at velum dot net
 Status:   Feedback
 Bug Type: MSSQL related
 Operating System: Windows XP
 PHP Version:  5.0.0b1 (beta1)
 New Comment:

This is to confirm that the same behaviour manifests itself in the
latest CVS snapshot, and also that the methods described in the
comments for Bug #21089 apply here.  This appears to be a change that
took place in 4.3 which continues to apply to 5.0.  The documentation
should be updated to reflect this change.


Previous Comments:


[2003-08-05 18:32:42] [EMAIL PROTECTED]

Please try using this CVS snapshot:

  http://snaps.php.net/php4-STABLE-latest.tar.gz
 
For Windows:
 
  http://snaps.php.net/win32/php4-win32-STABLE-latest.zip

and also read the comments in bug #21089




[2003-08-05 13:31:56] brian_caughlin at hotmail dot com

By the way, it looks like this bug may be a duplicate of Bug #21089. 
Perhaps this is simply an undocumented change.



[2003-08-05 12:20:15] brian_caughlin at hotmail dot com

I ran into this issue myself in 4.3.2, and found that the workaround is
to use the mssql_next_result() function before attempting to access the
retval and any output parameters.  I also found that I don't need to
pass the variables by reference.

Here is the code that works for me in 4.3.2:

?php 

$conn=mssql_connect(myhost,user,pwd); 

if ($conn) { 
mssql_select_db(mydb,$conn); 

$stmt=mssql_init(procedure,$conn); 
mssql_bind($stmt,RETVAL,$val,SQLINT4); 

$ival=11; 
$fval=2.1416; 
$sval=Frank; 

mssql_bind($stmt,@sval,$sval,SQLVARCHAR,TRUE); 
mssql_bind($stmt,@intval,$ival,SQLINT4,TRUE); 
mssql_bind($stmt,@floatval,$fval,SQLFLT8,TRUE); 

$result=mssql_execute($stmt); 

$arr=mssql_fetch_row($result); 
print (Answer:  . $arr[0] . 
 ); 
mssql_next_result($result);
print (RETVAL = $val ; intval = $ival ; floatval = $fval ; string =
$sval); 

mssql_close($conn); 
} 
else print(ooops!); 
?

I hope this helps!



[2003-07-10 14:38:29] hans at velum dot net

Yes, I verified that this is also happening with 4.3.2.  I thought,
based on a comment in the manual, that this was not an issue in the
4.3.2 release.

I also verified that the bound values are making it *into* the stored
procedure w/o incident.  (E.g. I can add them to the returned result
row to see that the stored procedure is aware of the values.)



[2003-07-10 12:52:15] [EMAIL PROTECTED]

Does this happen with PHP 4.3.2 ?




The remainder of the comments for this report are too long. To view
the rest of the comments, please view the bug report online at
http://bugs.php.net/24595

-- 
Edit this bug report at http://bugs.php.net/?id=24595edit=1



#24595 [Com]: Cannot bind output variables.

2003-08-05 Thread brian_caughlin at hotmail dot com
 ID:   24595
 Comment by:   brian_caughlin at hotmail dot com
 Reported By:  hans at velum dot net
 Status:   Open
 Bug Type: MSSQL related
 Operating System: Windows XP
 PHP Version:  5.0.0b1 (beta1)
 New Comment:

I ran into this issue myself in 4.3.2, and found that the workaround is
to use the mssql_next_result() function before attempting to access the
retval and any output parameters.  I also found that I don't need to
pass the variables by reference.

Here is the code that works for me in 4.3.2:

?php 

$conn=mssql_connect(myhost,user,pwd); 

if ($conn) { 
mssql_select_db(mydb,$conn); 

$stmt=mssql_init(procedure,$conn); 
mssql_bind($stmt,RETVAL,$val,SQLINT4); 

$ival=11; 
$fval=2.1416; 
$sval=Frank; 

mssql_bind($stmt,@sval,$sval,SQLVARCHAR,TRUE); 
mssql_bind($stmt,@intval,$ival,SQLINT4,TRUE); 
mssql_bind($stmt,@floatval,$fval,SQLFLT8,TRUE); 

$result=mssql_execute($stmt); 

$arr=mssql_fetch_row($result); 
print (Answer:  . $arr[0] . 
 ); 
mssql_next_result($result);
print (RETVAL = $val ; intval = $ival ; floatval = $fval ; string =
$sval); 

mssql_close($conn); 
} 
else print(ooops!); 
?

I hope this helps!


Previous Comments:


[2003-07-10 14:38:29] hans at velum dot net

Yes, I verified that this is also happening with 4.3.2.  I thought,
based on a comment in the manual, that this was not an issue in the
4.3.2 release.

I also verified that the bound values are making it *into* the stored
procedure w/o incident.  (E.g. I can add them to the returned result
row to see that the stored procedure is aware of the values.)



[2003-07-10 12:52:15] [EMAIL PROTECTED]

Does this happen with PHP 4.3.2 ?




[2003-07-10 12:35:09] hans at velum dot net

Description:

When using mssql_bind() to bind an output variable, the variable is
passed into the stored procedure but the modified value is not
returned.  (The variable is being passed by reference to mssql_bind()).

Reproduce code:
---
I used the following user-contributed example from mssql_execute manual
page.


if we have this procedure: 

CREATE PROCEDURE [procedure] 
( 
  @sval varchar(50) OUTPUT, 
  @intval int OUTPUT, 
  @floatval decimal(6,4) OUTPUT 
) AS 

if @intval is null 
select '@intval is null' as answer 
else 
select '@intval is NOT null' as answer 

set @sval='Hello ' + @sval 
set @[EMAIL PROTECTED] 
set @[EMAIL PROTECTED] 

return 10 

We can use this PHP code: 

?php 

$conn=mssql_connect(myhost,user,pwd); 

if ($conn) { 
mssql_select_db(mydb,$conn); 

$stmt=mssql_init(procedure,$conn); 
mssql_bind($stmt,RETVAL,$val,SQLINT4); 

$ival=11; 
$fval=2.1416; 
$sval=Frank; 

mssql_bind($stmt,@sval,$sval,SQLVARCHAR,TRUE); 
mssql_bind($stmt,@intval,$ival,SQLINT4,TRUE); 
mssql_bind($stmt,@floatval,$fval,SQLFLT8,TRUE); 

$result=mssql_execute($stmt); 

$arr=mssql_fetch_row($result); 
print (Answer:  . $arr[0] . 
 ); 
print (RETVAL = $val ; intval = $ival ; floatval = $fval ; string =
$sval); 

mssql_close($conn); 
} 
else print(ooops!); 


Expected result:

Answer: @intval is NOT nullRETVAL = 10 ; intval = 12 ; floatval =
3.1416 ; string = Hello Frank

Actual result:
--
Answer: @intval is NOT nullRETVAL = 0 ; intval = 11 ; floatval = 2.1416
; string = Frank





-- 
Edit this bug report at http://bugs.php.net/?id=24595edit=1