This commit is contained in:
yitam 2017-02-28 10:04:59 -08:00
parent f0a5da9823
commit 26c5f1785f
2 changed files with 52 additions and 1 deletions

View file

@ -2007,7 +2007,12 @@ void finalize_output_parameters( sqlsrv_stmt* stmt TSRMLS_DC )
// adjust the length of the string to the value returned by SQLBindParameter in the ind_ptr parameter
char* str = Z_STRVAL_P( value_z );
SQLLEN str_len = stmt->param_ind_ptrs[ output_param->param_num ];
if( str_len == SQL_NULL_DATA || str_len == 0 ) {
if (str_len == 0) {
str[str_len] = '\0';
core::sqlsrv_zval_stringl( value_z, str, str_len );
continue;
}
if( str_len == SQL_NULL_DATA ) {
zend_string_release( Z_STR_P( value_z ));
ZVAL_NULL( value_z );
continue;

View file

@ -0,0 +1,46 @@
--TEST--
GitHub issue #308 - empty string set to output parameter on stored procedure
--SKIPIF--
--FILE--
<?php
require_once("pdo_tools.inc");
// Connect
require_once("autonomous_setup.php");
$dbName = "tempdb";
$conn = new PDO("sqlsrv:server=$serverName;Database=$dbName", $username, $password);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$procName = GetTempProcName();
$sql = "CREATE PROCEDURE $procName @TEST VARCHAR(200)='' OUTPUT
AS BEGIN
SET NOCOUNT ON;
SET @TEST='';
SELECT HELLO_WORLD_COLUMN='THIS IS A COLUMN IN A SINGLE DATASET';
END";
$stmt = $conn->exec($sql);
$sql = "EXEC $procName @Test = :Test";
$stmt = $conn->prepare($sql);
$out = '';
$stmt->bindParam(':Test', $out, PDO::PARAM_STR | PDO::PARAM_INPUT_OUTPUT, 200);
$stmt->execute();
$result = $stmt->fetchAll();
$stmt->closeCursor();
echo "OUT value: ";
var_dump($out);
// Free the statement and connection resources.
$stmt = null;
$conn = null;
print "Done";
?>
--EXPECT--
OUT value: string(0) ""
Done