part 4 fetching various types
This commit is contained in:
parent
e53ca834d3
commit
45ea247c3f
|
@ -1,5 +1,5 @@
|
|||
--TEST--
|
||||
test rowCount() with different querying method
|
||||
test rowCount() with different querying method and test nextRowset() with different fetch
|
||||
--SKIPIF--
|
||||
|
||||
--FILE--
|
||||
|
@ -18,12 +18,15 @@ function RowCount_Query($exec)
|
|||
|
||||
$stmt = $conn->exec("CREATE TABLE $tableName ([c1_int] int, [c2_real] real)");
|
||||
|
||||
for ($i = 1; $i < 5; $i++)
|
||||
$numRows = 5;
|
||||
for ($i = 1; $i <= $numRows; $i++)
|
||||
{
|
||||
InsertData($conn, $tableName, $i);
|
||||
}
|
||||
|
||||
for ($i = 1; $i < 5; $i++)
|
||||
FetchRowsets($conn, $tableName, $numRows);
|
||||
|
||||
for ($i = 1; $i <= $numRows; $i++)
|
||||
{
|
||||
UpdateData($conn, $tableName, $i, $exec);
|
||||
}
|
||||
|
@ -46,10 +49,12 @@ function UpdateData($conn, $tableName, $value, $exec)
|
|||
$query = "UPDATE $tableName SET c1_int = $newValue WHERE (c1_int = $value)";
|
||||
$rowCount = 0;
|
||||
|
||||
if ($exec){
|
||||
if ($exec)
|
||||
{
|
||||
$rowCount = $conn->exec($query);
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
$stmt = $conn->prepare($query);
|
||||
$rowCount = $stmt->rowCount();
|
||||
if ($rowCount > 0)
|
||||
|
@ -65,15 +70,80 @@ function UpdateData($conn, $tableName, $value, $exec)
|
|||
$stmt = null;
|
||||
}
|
||||
|
||||
function CompareValues($actual, $expected)
|
||||
{
|
||||
if ($actual != $expected)
|
||||
{
|
||||
echo "Unexpected value $value returned! Expected $expected.\n";
|
||||
}
|
||||
}
|
||||
|
||||
function FetchRowsets($conn, $tableName, $numRows)
|
||||
{
|
||||
$query = "SELECT [c1_int] FROM $tableName ORDER BY [c1_int]";
|
||||
$queries = $query . ';' . $query . ';' . $query;
|
||||
$stmt = $conn->query($queries);
|
||||
|
||||
$i = 0;
|
||||
while ($row = $stmt->fetch(PDO::FETCH_LAZY))
|
||||
{
|
||||
$value = (int)$row['c1_int'];
|
||||
CompareValues($value, ++$i);
|
||||
}
|
||||
|
||||
if ($i != $numRows)
|
||||
{
|
||||
echo "Number of rows fetched $i is unexpected!\n";
|
||||
}
|
||||
|
||||
$result = $stmt->nextRowset();
|
||||
if ($result == false)
|
||||
{
|
||||
echo "Missing result sets!\n";
|
||||
}
|
||||
|
||||
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
|
||||
$i = 0;
|
||||
foreach ($rows as $row)
|
||||
{
|
||||
foreach ($row as $key => $value)
|
||||
{
|
||||
$value = (int)$value;
|
||||
CompareValues($value, ++$i);
|
||||
}
|
||||
}
|
||||
|
||||
$result = $stmt->nextRowset();
|
||||
if ($result == false)
|
||||
{
|
||||
echo "Missing result sets!\n";
|
||||
}
|
||||
|
||||
$stmt->bindColumn('c1_int', $value);
|
||||
$i = 0;
|
||||
while ($row = $stmt->fetch(PDO::FETCH_BOUND))
|
||||
{
|
||||
CompareValues($value, ++$i);
|
||||
}
|
||||
|
||||
$result = $stmt->nextRowset();
|
||||
if ($result != false)
|
||||
{
|
||||
echo "Number of result sets exceeding expectation!\n";
|
||||
}
|
||||
}
|
||||
|
||||
function DeleteData($conn, $tableName, $exec)
|
||||
{
|
||||
$query = "DELETE TOP(3) FROM $tableName";
|
||||
$rowCount = 0;
|
||||
|
||||
if ($exec){
|
||||
if ($exec)
|
||||
{
|
||||
$rowCount = $conn->exec($query);
|
||||
}
|
||||
else {
|
||||
else
|
||||
{
|
||||
$stmt = $conn->query($query);
|
||||
$rowCount = $stmt->rowCount();
|
||||
}
|
||||
|
|
300
test/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt
Normal file
300
test/pdo_sqlsrv/pdo_stored_proc_fetch_datatypes.phpt
Normal file
|
@ -0,0 +1,300 @@
|
|||
--TEST--
|
||||
call stored procedures with inputs of ten different datatypes to get outputs of various types
|
||||
--SKIPIF--
|
||||
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
include 'pdo_tools.inc';
|
||||
|
||||
function ProcFetch_BigInt($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 BIGINT, @p2 BIGINT, @p3 NCHAR(128) OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(NCHAR(128), @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '12345678';
|
||||
$inValue2 = '11111111';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindValue(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "23456789", 8))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Decimal($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 DECIMAL, @p2 DECIMAL, @p3 CHAR(128) OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '2.1';
|
||||
$inValue2 = '5.3';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindValue(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "7", 1))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Float($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 FLOAT, @p2 FLOAT, @p3 FLOAT OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(FLOAT, @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '2.25';
|
||||
$inValue2 = '5.5';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindValue(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "7.75", 4))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Int($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 INT, @p2 INT, @p3 INT OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(INT, @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '1234';
|
||||
$inValue2 = '5678';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindValue(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "6912", 4))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Money($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 MONEY, @p2 MONEY, @p3 MONEY OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(MONEY, @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '22.3';
|
||||
$inValue2 = '16.1';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1, PDO::PARAM_STR);
|
||||
$stmt->bindParam(2, $inValue2, PDO::PARAM_STR);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "38.40", 5))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Numeric($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 NUMERIC, @p2 NUMERIC, @p3 NCHAR(128) OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(NCHAR(128), @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '2.8';
|
||||
$inValue2 = '5.4';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindParam(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "8", 1))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_Real($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 REAL, @p2 REAL, @p3 REAL OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(REAL, @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '3.4';
|
||||
$inValue2 = '6.6';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindParam(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "10", 2))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_SmallInt($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 SMALLINT, @p2 SMALLINT, @p3 NCHAR(32) OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(NCHAR(32), @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '34';
|
||||
$inValue2 = '56';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindParam(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "90", 2))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_SmallMoney($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 SMALLMONEY, @p2 SMALLMONEY, @p3 SMALLMONEY OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(SMALLMONEY, @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '10';
|
||||
$inValue2 = '11.7';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1, PDO::PARAM_STR);
|
||||
$stmt->bindParam(2, $inValue2, PDO::PARAM_STR);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "21.70", 5))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function ProcFetch_TinyInt($conn)
|
||||
{
|
||||
$procName = GetTempProcName();
|
||||
|
||||
$stmt = $conn->exec("CREATE PROC $procName (@p1 TINYINT, @p2 TINYINT, @p3 CHAR(32) OUTPUT)
|
||||
AS BEGIN SELECT @p3 = CONVERT(CHAR(32), @p1 + @p2) END");
|
||||
|
||||
$inValue1 = '11';
|
||||
$inValue2 = '12';
|
||||
$outValue = '0';
|
||||
|
||||
$stmt = $conn->prepare("{CALL $procName (?, ?, ?)}");
|
||||
$stmt->bindValue(1, $inValue1);
|
||||
$stmt->bindParam(2, $inValue2);
|
||||
$stmt->bindParam(3, $outValue, PDO::PARAM_STR, 300);
|
||||
$stmt->execute();
|
||||
|
||||
if (strncasecmp($outValue, "23", 2))
|
||||
{
|
||||
echo "Output value $outValue is unexpected!\n";
|
||||
}
|
||||
|
||||
$stmt = null;
|
||||
}
|
||||
|
||||
function Repro()
|
||||
{
|
||||
set_time_limit(0);
|
||||
StartTest("pdo_stored_proc_fetch_datatypes");
|
||||
try
|
||||
{
|
||||
require_once("autonomous_setup.php");
|
||||
$database = "tempdb";
|
||||
$conn = new PDO( "sqlsrv:server=$serverName;Database=$database", $username, $password);
|
||||
|
||||
ProcFetch_BigInt($conn);
|
||||
ProcFetch_Decimal($conn);
|
||||
ProcFetch_Float($conn);
|
||||
ProcFetch_Int($conn);
|
||||
ProcFetch_Money($conn);
|
||||
ProcFetch_Numeric($conn);
|
||||
ProcFetch_Real($conn);
|
||||
ProcFetch_SmallInt($conn);
|
||||
ProcFetch_SmallMoney($conn);
|
||||
ProcFetch_TinyInt($conn);
|
||||
|
||||
$conn = null;
|
||||
}
|
||||
catch (Exception $e)
|
||||
{
|
||||
echo $e->getMessage();
|
||||
}
|
||||
echo "\nDone\n";
|
||||
EndTest("pdo_stored_proc_fetch_datatypes");
|
||||
}
|
||||
|
||||
Repro();
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
|
||||
...Starting 'pdo_stored_proc_fetch_datatypes' test...
|
||||
|
||||
Done
|
||||
...Test 'pdo_stored_proc_fetch_datatypes' completed successfully.
|
||||
|
Loading…
Reference in a new issue