commit
f73c23be1e
|
@ -2007,7 +2007,11 @@ 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 ) {
|
||||
core::sqlsrv_zval_stringl( value_z, "", 0 );
|
||||
continue;
|
||||
}
|
||||
if( str_len == SQL_NULL_DATA ) {
|
||||
zend_string_release( Z_STR_P( value_z ));
|
||||
ZVAL_NULL( value_z );
|
||||
continue;
|
||||
|
|
48
test/pdo_sqlsrv/pdo_308_empty_output_param.phpt
Normal file
48
test/pdo_sqlsrv/pdo_308_empty_output_param.phpt
Normal file
|
@ -0,0 +1,48 @@
|
|||
--TEST--
|
||||
GitHub issue #308 - empty string set to output parameter on stored procedure
|
||||
--DESCRIPTION--
|
||||
Verifies GitHub issue 308 is fixed, empty string returned as output parameter will remain an empty string.
|
||||
--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
|
47
test/sqlsrv/srv_308_empty_output_param.phpt
Normal file
47
test/sqlsrv/srv_308_empty_output_param.phpt
Normal file
|
@ -0,0 +1,47 @@
|
|||
--TEST--
|
||||
GitHub issue #308 - empty string set to output parameter on stored procedure
|
||||
--DESCRIPTION--
|
||||
A variation of the example in GitHub issue 308. A NULL value returned as output parameter will remain as NULL.
|
||||
--SKIPIF--
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("tools.inc");
|
||||
|
||||
require_once("autonomous_setup.php");
|
||||
|
||||
// Connect
|
||||
$conn = sqlsrv_connect($serverName, $connectionInfo) ?: FatalError("Failed to connect");
|
||||
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$sql = "CREATE PROCEDURE $procName @TEST VARCHAR(200)='' OUTPUT
|
||||
AS BEGIN
|
||||
SET NOCOUNT ON;
|
||||
SET @TEST=NULL;
|
||||
SELECT HELLO_WORLD_COLUMN='THIS IS A COLUMN IN A SINGLE DATASET';
|
||||
END";
|
||||
$stmt = sqlsrv_query($conn, $sql);
|
||||
if ($stmt === false) { FatalError("Failed to create stored procedure"); }
|
||||
|
||||
$sql = "EXEC $procName @Test = ?";
|
||||
$out = '';
|
||||
|
||||
$param = array(array(&$out, SQLSRV_PARAM_INOUT));
|
||||
$stmt = sqlsrv_query($conn, $sql, $param);
|
||||
if ($stmt === false) { FatalError("Failed to execute stored procedure"); }
|
||||
|
||||
$result = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC);
|
||||
sqlsrv_next_result($stmt);
|
||||
|
||||
echo "OUT value: ";
|
||||
var_dump($out);
|
||||
|
||||
// Free statement and connection resources
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
||||
print "Done";
|
||||
?>
|
||||
--EXPECT--
|
||||
OUT value: NULL
|
||||
Done
|
Loading…
Reference in a new issue