php-sqlsrv/test/pdo_sqlsrv/pdo_fetch_cursorBuffered_strings_to_integers.phpt
2017-05-04 08:14:06 -07:00

233 lines
6 KiB
PHP

--TEST--
prepare with cursor buffered and fetch various columns with the column bound and specified to pdo type int
--SKIPIF--
--FILE--
<?php
function test()
{
require_once("MsSetup.inc");
$conn = new PDO( "sqlsrv:server=$server; database=$databaseName", $uid, $pwd);
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$decimal = -2345209.3103;
$numeric = 987234.9919;
$salary = "3456789.15";
$debt = "98765.99";
$query = 'CREATE TABLE #TESTTABLE ([c_decimal] decimal(28,4), [c_numeric] numeric(32,4), [c_varchar] varchar(20), [c_nvarchar] nvarchar(20))';
$stmt = $conn->exec($query);
$query = 'INSERT INTO #TESTTABLE VALUES(:p0, :p1, :p2, :p3)';
$stmt = $conn->prepare($query);
$stmt->bindValue(':p0', $decimal);
$stmt->bindValue(':p1', $numeric);
$stmt->bindValue(':p2', $salary);
$stmt->bindValue(':p3', $debt);
$stmt->execute();
$decimal2 = $decimal * 2;
$numeric2 = $numeric * 2;
$salary2 = $salary * 2;
$debt2 = $debt * 2;
$stmt->bindValue(':p0', $decimal2);
$stmt->bindValue(':p1', $numeric2);
$stmt->bindValue(':p2', $salary2);
$stmt->bindValue(':p3', $debt2);
$stmt->execute();
$decimal3 = $decimal * 3;
$numeric3 = $numeric * 3;
$salary3 = $salary * 3;
$debt3 = $debt * 3;
$stmt->bindValue(':p0', $decimal3);
$stmt->bindValue(':p1', $numeric3);
$stmt->bindValue(':p2', $salary3);
$stmt->bindValue(':p3', $debt3);
$stmt->execute();
$stmt = null;
echo ("Input values:\n\torginal:$decimal\t$numeric\t$salary\t$debt\n\tdoubles:$decimal2\t$numeric2\t$salary2\t$debt2\n\ttriples:$decimal3\t$numeric3\t$salary3\t$debt3\n");
$query = 'SELECT * FROM #TESTTABLE';
// prepare with no buffered cursor
echo "\n\nComparing results (stringify off, fetch_numeric on):\n";
// no buffered cursor, stringify off, fetch_numeric on
$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);
$stmt1 = $conn->prepare($query);
$stmt1->execute();
// buffered cursor, stringify off, fetch_numeric on
$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, true);
$stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));
$stmt2->execute();
compareResults($stmt1, $stmt2);
$stmt1 = null;
$stmt2 = null;
echo "\n\nComparing results (stringify off, fetch_numeric off):\n";
// no buffered cursor, stringify off, fetch_numeric off
$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false);
$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false);
$stmt1 = $conn->prepare($query);
$stmt1->execute();
// buffered cursor, stringify off, fetch_numeric off
$conn->setAttribute( PDO::ATTR_STRINGIFY_FETCHES, false);
$conn->setAttribute( PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE, false);
$stmt2 = $conn->prepare($query, array(PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED));
$stmt2->execute();
compareResults($stmt1, $stmt2);
$stmt1 = null;
$stmt2 = null;
$conn = null;
}
function compareResults($stmt1, $stmt2)
{
$stmt1->bindColumn('c_decimal', $decimal_col1, PDO::PARAM_INT);
$stmt1->bindColumn('c_numeric', $numeric_col1, PDO::PARAM_INT);
$stmt1->bindColumn('c_varchar', $salary_col1, PDO::PARAM_INT);
$stmt1->bindColumn('c_nvarchar', $debt_col1, PDO::PARAM_INT);
$stmt2->bindColumn('c_decimal', $decimal_col2, PDO::PARAM_INT);
$stmt2->bindColumn('c_numeric', $numeric_col2, PDO::PARAM_INT);
$stmt2->bindColumn('c_varchar', $salary_col2, PDO::PARAM_INT);
$stmt2->bindColumn('c_nvarchar', $debt_col2, PDO::PARAM_INT);
$numRows = 3;
for ($i = 1; $i <= $numRows; $i++)
{
echo "\nreading row " . $i . "\n";
$value1 = $stmt1->fetch( PDO::FETCH_BOUND );
$value2 = $stmt2->fetch( PDO::FETCH_BOUND );
compareData($decimal_col1, $decimal_col2);
compareData($numeric_col1, $numeric_col2);
compareData($salary_col1, $salary_col2);
compareData($debt_col1, $debt_col2);
}
}
function compareData($data1, $data2)
{
if ($data1 != $data2)
echo "Not matched!\n";
else
echo "Matched!\n";
echo ("\tExpected: "); var_dump ($data1);
echo ("\tActual: "); var_dump ($data2);
}
test();
?>
--EXPECT--
Input values:
orginal:-2345209.3103 987234.9919 3456789.15 98765.99
doubles:-4690418.6206 1974469.9838 6913578.3 197531.98
triples:-7035627.9309 2961704.9757 10370367.45 296297.97
Comparing results (stringify off, fetch_numeric on):
reading row 1
Matched!
Expected: int(-2345209)
Actual: int(-2345209)
Matched!
Expected: int(987234)
Actual: int(987234)
Matched!
Expected: int(3456789)
Actual: int(3456789)
Matched!
Expected: int(98765)
Actual: int(98765)
reading row 2
Matched!
Expected: int(-4690418)
Actual: int(-4690418)
Matched!
Expected: int(1974469)
Actual: int(1974469)
Matched!
Expected: int(6913578)
Actual: int(6913578)
Matched!
Expected: int(197531)
Actual: int(197531)
reading row 3
Matched!
Expected: int(-7035627)
Actual: int(-7035627)
Matched!
Expected: int(2961704)
Actual: int(2961704)
Matched!
Expected: int(10370367)
Actual: int(10370367)
Matched!
Expected: int(296297)
Actual: int(296297)
Comparing results (stringify off, fetch_numeric off):
reading row 1
Matched!
Expected: int(-2345209)
Actual: int(-2345209)
Matched!
Expected: int(987234)
Actual: int(987234)
Matched!
Expected: int(3456789)
Actual: int(3456789)
Matched!
Expected: int(98765)
Actual: int(98765)
reading row 2
Matched!
Expected: int(-4690418)
Actual: int(-4690418)
Matched!
Expected: int(1974469)
Actual: int(1974469)
Matched!
Expected: int(6913578)
Actual: int(6913578)
Matched!
Expected: int(197531)
Actual: int(197531)
reading row 3
Matched!
Expected: int(-7035627)
Actual: int(-7035627)
Matched!
Expected: int(2961704)
Actual: int(2961704)
Matched!
Expected: int(10370367)
Actual: int(10370367)
Matched!
Expected: int(296297)
Actual: int(296297)