#24595 [Com]: Cannot bind output variables.
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.
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.
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