Refactor sqlsrv tests with buffer or cursor
This commit is contained in:
parent
628e0c9233
commit
6a14325f37
|
@ -1,7 +1,9 @@
|
|||
--TEST--
|
||||
scrollable results with no rows.
|
||||
--DESCRIPTION--
|
||||
this test is very similar to test_scrollable.phpt... might consider removing this test as a duplicate
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 0);
|
||||
|
@ -9,23 +11,37 @@ scrollable results with no rows.
|
|||
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = connect();
|
||||
if ($conn === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$conn = AE\connect();
|
||||
$tableName = 'ScrollTest';
|
||||
|
||||
$stmt = sqlsrv_query($conn, "IF OBJECT_ID('ScrollTest', 'U') IS NOT NULL DROP TABLE ScrollTest");
|
||||
if ($stmt !== false) {
|
||||
sqlsrv_free_stmt($stmt);
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE ScrollTest (id int, value char(10))");
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$columns = array(new AE\ColumnMeta('int', 'id'),
|
||||
new AE\ColumnMeta('char(10)', 'value'));
|
||||
$stmt = AE\createTable($conn, $tableName, $columns);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'static' ));
|
||||
$query = "SELECT * FROM $tableName";
|
||||
if (AE\isColEncrypted()) {
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_FORWARD);
|
||||
} else {
|
||||
$options = array('Scrollable' => 'static');
|
||||
}
|
||||
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if ($rows != false) {
|
||||
fatalError("Should be no rows present");
|
||||
};
|
||||
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$row = sqlsrv_fetch_array($stmt);
|
||||
print_r($row);
|
||||
if ($row === false) {
|
||||
print_r(sqlsrv_errors(), true);
|
||||
}
|
||||
|
||||
$stmt = AE\selectFromTable($conn, $tableName);
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if ($rows != false) {
|
||||
fatalError("Should be no rows present");
|
||||
|
@ -40,23 +56,7 @@ scrollable results with no rows.
|
|||
print_r(sqlsrv_errors(), true);
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM ScrollTest");
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if ($rows != false) {
|
||||
fatalError("Should be no rows present");
|
||||
};
|
||||
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$row = sqlsrv_fetch_array($stmt);
|
||||
print_r($row);
|
||||
if ($row === false) {
|
||||
print_r(sqlsrv_errors(), true);
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, "DROP TABLE ScrollTest");
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
echo "Test succeeded.\n";
|
||||
|
||||
?>
|
||||
|
|
|
@ -381,6 +381,36 @@ function createTable($conn, $tbname, $columnMetaArr)
|
|||
return sqlsrv_query($conn, $createSql);
|
||||
}
|
||||
|
||||
/**
|
||||
* Create a table with options for sqlsrv_prepare()
|
||||
* @param resource $conn : sqlsrv connection resource
|
||||
* @param string $tbname : name of the table to be created
|
||||
* @param array $columnMetaArr : array of ColumnMeta objects, which contain metadata for one column
|
||||
* @param array $options : array of options for sqlsrv_prepare()
|
||||
* @return resource sqlsrv statement resource
|
||||
*/
|
||||
function createTableEx($conn, $tbname, $columnMetaArr, $options)
|
||||
{
|
||||
require_once("MsCommon.inc");
|
||||
dropTable($conn, $tbname);
|
||||
$colDef = "";
|
||||
foreach ($columnMetaArr as $meta) {
|
||||
$colDef = $colDef . $meta->getColDef() . ", ";
|
||||
}
|
||||
$colDef = rtrim($colDef, ", ");
|
||||
$createSql = "CREATE TABLE $tbname ( $colDef )";
|
||||
$stmt = sqlsrv_prepare($conn, $createSql, array(), $options);
|
||||
if ($stmt) {
|
||||
$res = sqlsrv_execute($stmt);
|
||||
if ($res == false) {
|
||||
fatalError("createTableEx: failed to execute the query to create table\n");
|
||||
}
|
||||
} else {
|
||||
fatalError("createTableEx: failed to prepare the statement to create table\n");
|
||||
}
|
||||
return $stmt;
|
||||
}
|
||||
|
||||
/**
|
||||
* Insert a row into a table
|
||||
* @param resource $conn : sqlsrv connection resource
|
||||
|
@ -455,9 +485,10 @@ function selectFromTable($conn, $tbname, $conds = null, $values = null)
|
|||
* @param string $sql : T-SQL query
|
||||
* @param string $conds : string of condition(s) possibly with placeholders, null by default
|
||||
* @param array $values : array of parameters, null by default
|
||||
* @param array $options : array of query options, null by default
|
||||
* @return resource sqlsrv statement upon success or false otherwise
|
||||
*/
|
||||
function executeQuery($conn, $sql, $conds = null, $values = null)
|
||||
function executeQuery($conn, $sql, $conds = null, $values = null, $options = null)
|
||||
{
|
||||
if (!isColEncrypted()) {
|
||||
// if not encrypted replace placeholders ('?') with values, if array not empty
|
||||
|
@ -475,16 +506,17 @@ function executeQuery($conn, $sql, $conds = null, $values = null)
|
|||
$sql = $sql . " WHERE $clause ";
|
||||
} elseif (!empty($conds)) {
|
||||
$sql = $sql . " WHERE $conds ";
|
||||
}
|
||||
$stmt = sqlsrv_query($conn, $sql);
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, $sql, null, $options);
|
||||
} else {
|
||||
// with AE enabled, use sqlsrv_prepare() in case there are
|
||||
// fields with unlimited size
|
||||
if (empty($conds) || empty($values)) {
|
||||
$stmt = sqlsrv_prepare($conn, $sql);
|
||||
if (empty($conds) || empty($values)) {
|
||||
$stmt = sqlsrv_prepare($conn, $sql, null, $options);
|
||||
} else {
|
||||
$sql = $sql . " WHERE $conds ";
|
||||
$stmt = sqlsrv_prepare($conn, $sql, $values);
|
||||
$stmt = sqlsrv_prepare($conn, $sql, $values, $options);
|
||||
}
|
||||
if ($stmt) {
|
||||
$r = sqlsrv_execute($stmt);
|
||||
|
|
|
@ -1,46 +1,82 @@
|
|||
--TEST--
|
||||
Read, Update, Insert from a SQLSRV stream with buffered query
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Could not connect");
|
||||
function insertOneRow($conn, $tableName)
|
||||
{
|
||||
$result = null;
|
||||
if (AE\isColEncrypted()) {
|
||||
$data = array("Field2" => "This is field 2.",
|
||||
"Field3" => array("010203", null, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_IMAGE),
|
||||
"Field4" => "This is field 4.",
|
||||
"Field5" => array("040506", null, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARBINARY('max')),
|
||||
"Field6" => "This is field 6.",
|
||||
"Field7" => "This is field 7.");
|
||||
$query = AE\getInsertSqlPlaceholders($tableName, $data);
|
||||
|
||||
// form the array of parameters
|
||||
$params = array();
|
||||
foreach ($data as $key => $input) {
|
||||
array_push($params, $input);
|
||||
}
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
} else {
|
||||
$query = "INSERT INTO $tableName ([Field2], [Field3], [Field4], [Field5], [Field6], [Field7]) VALUES ('This is field 2.', 0x010203, 'This is field 4.', 0x040506, 'This is field 6.', 'This is field 7.' )";
|
||||
$stmt = sqlsrv_prepare($conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
}
|
||||
|
||||
if (!$stmt) {
|
||||
fatalError("insertOneRow: query could not be prepared.\n");
|
||||
}
|
||||
$result = sqlsrv_execute($stmt);
|
||||
if ($result === false) {
|
||||
fatalError("insertOneRow: failed to insert data!\n");
|
||||
}
|
||||
return $stmt;
|
||||
}
|
||||
|
||||
$query = "IF OBJECT_ID('PhpCustomerTable', 'U') IS NOT NULL DROP TABLE [PhpCustomerTable]";
|
||||
$stmt = sqlsrv_prepare($conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
function updateRow($conn, $tableName, $updateField, $params)
|
||||
{
|
||||
$condField = 'Field7';
|
||||
$condition = 'This is field 7.';
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
if (AE\isColEncrypted()) {
|
||||
$query = "UPDATE $tableName SET $updateField=? WHERE $condField = ?";
|
||||
|
||||
array_push($params, array($condition, SQLSRV_PARAM_IN, null, SQLSRV_SQLTYPE_NVARCHAR('max')));
|
||||
} else {
|
||||
$query = "UPDATE $tableName SET $updateField=? WHERE $condField = '$condition'";
|
||||
}
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
if (!$stmt) {
|
||||
fatalError("updateRow: query could not be prepared.\n");
|
||||
}
|
||||
$result = sqlsrv_execute($stmt);
|
||||
if ($result === false) {
|
||||
fatalError("updateRow: failed to update $updateField!\n");
|
||||
}
|
||||
sqlsrv_free_stmt($stmt);
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
$conn = AE\connect();
|
||||
$tableName = 'PhpCustomerTable';
|
||||
|
||||
$query = "CREATE TABLE [PhpCustomerTable] ([Id] int NOT NULL Identity (100,2) PRIMARY KEY, [Field2] text, [Field3] image, [Field4] ntext, [Field5] varbinary(max), [Field6] varchar(max), [Field7] nvarchar(max))";
|
||||
$stmt = sqlsrv_prepare($conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
// Create the test table and insert one row
|
||||
$columns = array(new AE\ColumnMeta('int', 'Id', 'NOT NULL Identity (100,2) PRIMARY KEY'),
|
||||
new AE\ColumnMeta('text', 'Field2'),
|
||||
new AE\ColumnMeta('image', 'Field3'),
|
||||
new AE\ColumnMeta('ntext', 'Field4'),
|
||||
new AE\ColumnMeta('varbinary(max)', 'Field5'),
|
||||
new AE\ColumnMeta('varchar(max)', 'Field6'),
|
||||
new AE\ColumnMeta('nvarchar(max)', 'Field7'));
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
|
||||
$query = "INSERT [PhpCustomerTable] ([Field2], [Field3], [Field4], [Field5], [Field6], [Field7]) VALUES ('This is field 2.', 0x010203, 'This is field 4.', 0x040506, 'This is field 6.', 'This is field 7.' )";
|
||||
$stmt = sqlsrv_prepare($conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
AE\createTableEx($conn, $tableName, $columns, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
$stmt = insertOneRow($conn, $tableName);
|
||||
|
||||
$f2 = fopen('php://memory', 'a');
|
||||
fwrite($f2, 'Update field 2.');
|
||||
|
@ -61,88 +97,27 @@ $f7 = fopen('php://memory', 'a');
|
|||
fwrite($f7, 'Update field 7.');
|
||||
rewind($f7);
|
||||
|
||||
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field2]=? WHERE [Field7]='This is field 7.'";
|
||||
// Update data in the table
|
||||
$params = array(array(&$f2, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_TEXT));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field2', $params);
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field3]=? WHERE [Field7]='This is field 7.'";
|
||||
$params = array(array(&$f3, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), SQLSRV_SQLTYPE_IMAGE));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field3', $params);
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field4]=? WHERE [Field7]='This is field 7.'";
|
||||
$params = array(array(&$f4, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NTEXT));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field4', $params);
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field5]=? WHERE [Field7]='This is field 7.'";
|
||||
$params = array(array(&$f5, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_BINARY), SQLSRV_SQLTYPE_VARBINARY('max')));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field5', $params);
|
||||
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field6]=? WHERE [Field7]='This is field 7.'";
|
||||
$params = array(array(&$f6, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_VARCHAR('MAX')));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field6', $params);
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$query = "UPDATE [PhpCustomerTable] SET [Field7]=? WHERE [Field7]='This is field 7.'";
|
||||
$params = array(array(&$f7, SQLSRV_PARAM_IN, SQLSRV_PHPTYPE_STREAM(SQLSRV_ENC_CHAR), SQLSRV_SQLTYPE_NVARCHAR('MAX')));
|
||||
$stmt = sqlsrv_prepare($conn, $query, $params, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
updateRow($conn, $tableName, 'Field7', $params);
|
||||
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM [PhpCustomerTable]", array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
// Fetch data from the table
|
||||
$stmt = AE\executeQueryEx($conn, "SELECT * FROM [PhpCustomerTable]", array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
sqlsrv_fetch($stmt);
|
||||
|
||||
$field = sqlsrv_get_field($stmt, 0, SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR));
|
||||
|
@ -195,7 +170,7 @@ if (!$field) {
|
|||
print("$field\n");
|
||||
}
|
||||
|
||||
sqlsrv_query($conn, "DROP TABLE [PhpCustomerTable]");
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
|
|
@ -1,40 +1,33 @@
|
|||
--TEST--
|
||||
Fetch array of extended ASCII data using a scrollable buffered cursor
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("MsCommon.inc");
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
// Connect
|
||||
$conn = connect(array( 'CharacterSet'=>'UTF-8' ));
|
||||
if (!$conn) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$conn = AE\connect(array('CharacterSet'=>'UTF-8'));
|
||||
|
||||
// Create table
|
||||
$tableName = '#exAsciiTest';
|
||||
$query = "CREATE TABLE $tableName (ID CHAR(10))";
|
||||
$stmt = sqlsrv_query($conn, $query);
|
||||
$tableName = 'exAsciiTest';
|
||||
$columns = array(new AE\ColumnMeta('CHAR(10)', 'ID'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
// Insert data
|
||||
$query = "INSERT INTO $tableName VALUES ('Aå_Ð×Æ×Ø_B')";
|
||||
$stmt = sqlsrv_query($conn, $query);
|
||||
if (! $stmt) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$res = null;
|
||||
$stmt = AE\insertRow($conn, $tableName, array('ID' => 'Aå_Ð×Æ×Ø_B'));
|
||||
|
||||
// Fetch data
|
||||
$query = "SELECT * FROM $tableName";
|
||||
$stmt = sqlsrv_query($conn, $query, [], array("Scrollable"=>"buffered"));
|
||||
if (! $stmt) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$stmt = AE\executeQueryEx($conn, $query, array("Scrollable"=>"buffered"));
|
||||
|
||||
// Fetch
|
||||
$row = sqlsrv_fetch_array($stmt);
|
||||
var_dump($row);
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
// Close connection
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
|
|
@ -1,24 +1,27 @@
|
|||
--TEST--
|
||||
Test with static cursor and select different rows in some random order
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function FetchRow_Query($conn)
|
||||
function fetchRowQuery($conn)
|
||||
{
|
||||
$tableName = GetTempTableName();
|
||||
$tableName = 'testScrollCursor';
|
||||
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_varchar] varchar(10))");
|
||||
sqlsrv_free_stmt($stmt);
|
||||
$columns = array(new AE\ColumnMeta('int', 'c1_int'),
|
||||
new AE\ColumnMeta('varchar(10)', 'c2_varchar'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
// insert data
|
||||
$numRows = 10;
|
||||
InsertData($conn, $tableName, $numRows);
|
||||
insertData($conn, $tableName, $numRows);
|
||||
|
||||
// select table
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM $tableName", array(), array('Scrollable' => 'static'));
|
||||
|
||||
HasRows($stmt);
|
||||
hasRows($stmt);
|
||||
$numRowsFetched = 0;
|
||||
while ($obj = sqlsrv_fetch_object($stmt)) {
|
||||
echo $obj->c1_int . ", " . $obj->c2_varchar . "\n";
|
||||
|
@ -29,25 +32,27 @@ function FetchRow_Query($conn)
|
|||
echo "Number of rows fetched $numRowsFetched is wrong! Expected $numRows\n";
|
||||
}
|
||||
|
||||
GetFirstRow($stmt);
|
||||
GetNextRow($stmt);
|
||||
GetLastRow($stmt);
|
||||
GetPriorRow($stmt);
|
||||
GetAbsoluteRow($stmt, 7);
|
||||
GetAbsoluteRow($stmt, 2);
|
||||
GetRelativeRow($stmt, 3);
|
||||
GetPriorRow($stmt);
|
||||
GetRelativeRow($stmt, -4);
|
||||
GetAbsoluteRow($stmt, 0);
|
||||
GetNextRow($stmt);
|
||||
GetRelativeRow($stmt, 5);
|
||||
GetAbsoluteRow($stmt, -1);
|
||||
GetNextRow($stmt);
|
||||
GetLastRow($stmt);
|
||||
GetRelativeRow($stmt, 1);
|
||||
getFirstRow($stmt);
|
||||
getNextRow($stmt);
|
||||
getLastRow($stmt);
|
||||
getPriorRow($stmt);
|
||||
getAbsoluteRow($stmt, 7);
|
||||
getAbsoluteRow($stmt, 2);
|
||||
getRelativeRow($stmt, 3);
|
||||
getPriorRow($stmt);
|
||||
getRelativeRow($stmt, -4);
|
||||
getAbsoluteRow($stmt, 0);
|
||||
getNextRow($stmt);
|
||||
getRelativeRow($stmt, 5);
|
||||
getAbsoluteRow($stmt, -1);
|
||||
getNextRow($stmt);
|
||||
getLastRow($stmt);
|
||||
getRelativeRow($stmt, 1);
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
}
|
||||
|
||||
function InsertData($conn, $tableName, $numRows)
|
||||
function insertData($conn, $tableName, $numRows)
|
||||
{
|
||||
$stmt = sqlsrv_prepare($conn, "INSERT INTO $tableName (c1_int, c2_varchar) VALUES (?, ?)", array(&$v1, &$v2));
|
||||
|
||||
|
@ -59,7 +64,7 @@ function InsertData($conn, $tableName, $numRows)
|
|||
}
|
||||
}
|
||||
|
||||
function GetFirstRow($stmt)
|
||||
function getFirstRow($stmt)
|
||||
{
|
||||
echo "\nfirst row: ";
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);
|
||||
|
@ -70,7 +75,7 @@ function GetFirstRow($stmt)
|
|||
}
|
||||
}
|
||||
|
||||
function GetNextRow($stmt)
|
||||
function getNextRow($stmt)
|
||||
{
|
||||
echo "\nnext row: ";
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_NEXT);
|
||||
|
@ -81,7 +86,7 @@ function GetNextRow($stmt)
|
|||
}
|
||||
}
|
||||
|
||||
function GetPriorRow($stmt)
|
||||
function getPriorRow($stmt)
|
||||
{
|
||||
echo "\nprior row: ";
|
||||
$obj = sqlsrv_fetch_object($stmt, null, null, SQLSRV_SCROLL_PRIOR);
|
||||
|
@ -90,7 +95,7 @@ function GetPriorRow($stmt)
|
|||
}
|
||||
}
|
||||
|
||||
function GetLastRow($stmt)
|
||||
function getLastRow($stmt)
|
||||
{
|
||||
echo "\nlast row: ";
|
||||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC, SQLSRV_SCROLL_LAST);
|
||||
|
@ -99,7 +104,7 @@ function GetLastRow($stmt)
|
|||
}
|
||||
}
|
||||
|
||||
function GetRelativeRow($stmt, $offset)
|
||||
function getRelativeRow($stmt, $offset)
|
||||
{
|
||||
echo "\nrow $offset from the current row: ";
|
||||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_RELATIVE, $offset);
|
||||
|
@ -108,7 +113,7 @@ function GetRelativeRow($stmt, $offset)
|
|||
}
|
||||
}
|
||||
|
||||
function GetAbsoluteRow($stmt, $offset)
|
||||
function getAbsoluteRow($stmt, $offset)
|
||||
{
|
||||
echo "\nabsolute row with offset $offset: ";
|
||||
$obj = sqlsrv_fetch_object($stmt, null, null, SQLSRV_SCROLL_ABSOLUTE, $offset);
|
||||
|
@ -117,7 +122,7 @@ function GetAbsoluteRow($stmt, $offset)
|
|||
}
|
||||
}
|
||||
|
||||
function HasRows($stmt)
|
||||
function hasRows($stmt)
|
||||
{
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if ($rows != true) {
|
||||
|
@ -125,36 +130,18 @@ function HasRows($stmt)
|
|||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// RunTest
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
function RunTest()
|
||||
{
|
||||
startTest("sqlsrv_fetch_cursor_static_scroll");
|
||||
try {
|
||||
set_time_limit(0);
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||
set_time_limit(0);
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||
|
||||
echo "\nTest begins...\n";
|
||||
echo "\nTest begins...\n";
|
||||
|
||||
// Connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Could not connect.\n");
|
||||
}
|
||||
// Connect
|
||||
$conn = AE\connect();
|
||||
fetchRowQuery($conn);
|
||||
|
||||
FetchRow_Query($conn);
|
||||
|
||||
sqlsrv_close($conn);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
echo "\nDone\n";
|
||||
endTest("sqlsrv_fetch_cursor_static_scroll");
|
||||
}
|
||||
|
||||
RunTest();
|
||||
sqlsrv_close($conn);
|
||||
echo "\nDone\n";
|
||||
endTest("sqlsrv_fetch_cursor_static_scroll");
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
|
|
|
@ -1,25 +1,28 @@
|
|||
--TEST--
|
||||
Test various cursor types and whether they reflect changes in the database
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
<?php
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function Fetch_WithCursor($conn, $cursorType)
|
||||
function fetchWithCursor($conn, $cursorType)
|
||||
{
|
||||
$tableName = GetTempTableName();
|
||||
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_char] char(10))");
|
||||
sqlsrv_free_stmt($stmt);
|
||||
$tableName = "table_$cursorType";
|
||||
|
||||
$columns = array(new AE\ColumnMeta('int', 'c1_int'),
|
||||
new AE\ColumnMeta('char(10)', 'c2_char'));
|
||||
$stmt = AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
// insert four rows
|
||||
$numRows = 4;
|
||||
InsertData($conn, $tableName, 0, $numRows);
|
||||
insertData($conn, $tableName, 0, $numRows);
|
||||
|
||||
// select table
|
||||
$stmt = sqlsrv_prepare($conn, "SELECT * FROM $tableName", array(), array('Scrollable' => $cursorType));
|
||||
sqlsrv_execute($stmt);
|
||||
|
||||
GetNumRows($stmt, $cursorType);
|
||||
getNumRows($stmt, $cursorType);
|
||||
$numRowsFetched = 0;
|
||||
while ($obj = sqlsrv_fetch_object($stmt)) {
|
||||
echo $obj->c1_int . "\n";
|
||||
|
@ -30,10 +33,12 @@ function Fetch_WithCursor($conn, $cursorType)
|
|||
echo "Number of rows fetched $numRowsFetched is wrong! Expected $numRows\n";
|
||||
}
|
||||
|
||||
DeleteThenFetchLastRow($conn, $stmt, $tableName, 4);
|
||||
deleteThenFetchLastRow($conn, $stmt, $tableName, 4);
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
}
|
||||
|
||||
function InsertData($conn, $tableName, $start, $count)
|
||||
function insertData($conn, $tableName, $start, $count)
|
||||
{
|
||||
$stmt = sqlsrv_prepare($conn, "INSERT INTO $tableName (c1_int, c2_char) VALUES (?, ?)", array(&$v1, &$v2));
|
||||
|
||||
|
@ -46,13 +51,10 @@ function InsertData($conn, $tableName, $start, $count)
|
|||
}
|
||||
}
|
||||
|
||||
function DeleteThenFetchLastRow($conn, $stmt, $tableName, $id)
|
||||
function deleteThenFetchLastRow($conn, $stmt, $tableName, $id)
|
||||
{
|
||||
echo "\nNow delete the last row then try to fetch it...\n";
|
||||
$stmt2 = sqlsrv_query($conn, "DELETE FROM $tableName WHERE [c1_int] = 4");
|
||||
if ($stmt2 !== false) {
|
||||
sqlsrv_free_stmt($stmt2);
|
||||
}
|
||||
$stmt2 = AE\executeQuery($conn, "DELETE FROM $tableName", "[c1_int] = ?", array(4));
|
||||
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_LAST);
|
||||
if ($result) {
|
||||
|
@ -65,7 +67,7 @@ function DeleteThenFetchLastRow($conn, $stmt, $tableName, $id)
|
|||
}
|
||||
}
|
||||
|
||||
function GetNumRows($stmt, $cursorType)
|
||||
function getNumRows($stmt, $cursorType)
|
||||
{
|
||||
$expectedToFail = false;
|
||||
if ($cursorType == SQLSRV_CURSOR_FORWARD || $cursorType == SQLSRV_CURSOR_DYNAMIC) {
|
||||
|
@ -89,48 +91,31 @@ function GetNumRows($stmt, $cursorType)
|
|||
}
|
||||
}
|
||||
|
||||
//--------------------------------------------------------------------
|
||||
// RunTest
|
||||
//
|
||||
//--------------------------------------------------------------------
|
||||
function RunTest()
|
||||
{
|
||||
startTest("sqlsrv_fetch_cursor_types");
|
||||
try {
|
||||
set_time_limit(0);
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||
try {
|
||||
set_time_limit(0);
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||
|
||||
echo "\nTest begins...\n";
|
||||
// Connect
|
||||
$conn = AE\connect();
|
||||
|
||||
// Connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Could not connect.\n");
|
||||
}
|
||||
echo "\nUsing SQLSRV_CURSOR_FORWARD...\n";
|
||||
fetchWithCursor($conn, SQLSRV_CURSOR_FORWARD);
|
||||
echo "\nUsing SQLSRV_CURSOR_DYNAMIC...\n";
|
||||
fetchWithCursor($conn, SQLSRV_CURSOR_DYNAMIC);
|
||||
echo "\nUsing SQLSRV_CURSOR_KEYSET...\n";
|
||||
fetchWithCursor($conn, SQLSRV_CURSOR_KEYSET);
|
||||
echo "\nUsing SQLSRV_CURSOR_STATIC...\n";
|
||||
fetchWithCursor($conn, SQLSRV_CURSOR_STATIC);
|
||||
|
||||
echo "\nUsing SQLSRV_CURSOR_FORWARD...\n";
|
||||
Fetch_WithCursor($conn, SQLSRV_CURSOR_FORWARD);
|
||||
echo "\nUsing SQLSRV_CURSOR_DYNAMIC...\n";
|
||||
Fetch_WithCursor($conn, SQLSRV_CURSOR_DYNAMIC);
|
||||
echo "\nUsing SQLSRV_CURSOR_KEYSET...\n";
|
||||
Fetch_WithCursor($conn, SQLSRV_CURSOR_KEYSET);
|
||||
echo "\nUsing SQLSRV_CURSOR_STATIC...\n";
|
||||
Fetch_WithCursor($conn, SQLSRV_CURSOR_STATIC);
|
||||
|
||||
sqlsrv_close($conn);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
echo "\nDone\n";
|
||||
endTest("sqlsrv_fetch_cursor_types");
|
||||
sqlsrv_close($conn);
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
|
||||
RunTest();
|
||||
echo "\nDone\n";
|
||||
endTest("sqlsrv_fetch_cursor_types");
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
|
||||
Test begins...
|
||||
|
||||
Using SQLSRV_CURSOR_FORWARD...
|
||||
Error occurred in sqlsrv_num_rows, which is expected
|
||||
|
|
|
@ -1,26 +1,23 @@
|
|||
--TEST--
|
||||
Fetch missing row
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
<?php
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function MissingRow_Fetch()
|
||||
function missingRowFetch()
|
||||
{
|
||||
set_time_limit(0);
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 1);
|
||||
|
||||
// Connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Could not connect.\n");
|
||||
}
|
||||
$conn = AE\connect();
|
||||
$tableName = 'missingRow';
|
||||
|
||||
$tableName = GetTempTableName();
|
||||
AE\createTestTable($conn, $tableName);
|
||||
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] int, [c2_tinyint] tinyint, [c3_smallint] smallint, [c4_bigint] bigint, [c5_bit] bit, [c6_float] float, [c7_real] real, [c8_decimal] decimal(28,4), [c9_numeric] numeric(32,4), [c10_money] money, [c11_smallmoney] smallmoney, [c12_char] char(512), [c13_varchar] varchar(512), [c14_varchar_max] varchar(max), [c15_nchar] nchar(512), [c16_nvarchar] nvarchar(512), [c17_nvarchar_max] nvarchar(max), [c18_text] text, [c19_ntext] ntext, [c20_binary] binary(512), [c21_varbinary] varbinary(512), [c22_varbinary_max] varbinary(max), [c23_image] image, [c24_uniqueidentifier] uniqueidentifier, [c25_datetime] datetime, [c26_smalldatetime] smalldatetime, [c27_timestamp] timestamp, [c28_xml] xml, [c29_time] time, [c30_date] date, [c31_datetime2] datetime2, [c32_datetimeoffset] datetimeoffset)");
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM $tableName");
|
||||
$stmt = AE\selectFromTable($conn, $tableName);
|
||||
$result1 = sqlsrv_fetch($stmt);
|
||||
$result2 = sqlsrv_fetch($stmt);
|
||||
|
||||
|
@ -33,32 +30,18 @@ function MissingRow_Fetch()
|
|||
$value3 = $e['SQLSTATE'];
|
||||
print "$value3\n";
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
}
|
||||
|
||||
function Repro()
|
||||
{
|
||||
startTest("sqlsrv_fetch_missing_row");
|
||||
echo "\nTest begins...\n";
|
||||
try {
|
||||
MissingRow_Fetch();
|
||||
} catch (Exception $e) {
|
||||
echo $e->getMessage();
|
||||
}
|
||||
echo "\nDone\n";
|
||||
endTest("sqlsrv_fetch_missing_row");
|
||||
}
|
||||
|
||||
Repro();
|
||||
missingRowFetch();
|
||||
endTest("sqlsrv_fetch_missing_row");
|
||||
|
||||
?>
|
||||
--EXPECT--
|
||||
|
||||
Test begins...
|
||||
There are no more rows in the active result set. Since this result set is not scrollable, no more data may be retrieved.
|
||||
-22
|
||||
IMSSP
|
||||
|
||||
Done
|
||||
Test "sqlsrv_fetch_missing_row" completed successfully.
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
--TEST--
|
||||
Test for fetch_object
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
@ -41,28 +41,22 @@ class foo_noargs
|
|||
} // end class foo_noargs
|
||||
|
||||
sqlsrv_configure( 'WarningsReturnAsErrors', 0 );
|
||||
require( 'MsCommon.inc' );
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = Connect();
|
||||
if( $conn === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "IF OBJECT_ID('test_params', 'U') IS NOT NULL DROP TABLE test_params" );
|
||||
sqlsrv_execute( $stmt );
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "CREATE TABLE test_params (id tinyint, name char(10), [double] float, stuff varchar(max))" );
|
||||
sqlsrv_execute( $stmt );
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
$conn = AE\connect();
|
||||
$tableName = 'test_params';
|
||||
$columns = array(new AE\ColumnMeta('tinyint', 'id'),
|
||||
new AE\ColumnMeta('char(10)', 'name'),
|
||||
new AE\ColumnMeta('float', 'double'),
|
||||
new AE\ColumnMeta('varchar(max)', 'stuff'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$f1 = 1;
|
||||
$f2 = "testtestte";
|
||||
$f3 = 12.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 )); //,
|
||||
//~ array( SQLSRV_SQLTYPE_INTEGER, SQLSRV_SQLTYPE_CHAR(10), SQLSRV_SQLTYPE_DOUBLE, SQLSRV_SQLTYPE_VARBINARY(4000)));
|
||||
$stmt = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
if( !$stmt ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
die( "sqlsrv_prepare failed." );
|
||||
|
@ -147,7 +141,7 @@ if( !is_null( $success )) {
|
|||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "SELECT id, [double], name, stuff FROM test_params" );
|
||||
$stmt = sqlsrv_prepare( $conn, "SELECT id, [double], name, stuff FROM $tableName" );
|
||||
$success = sqlsrv_execute( $stmt );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -239,7 +233,7 @@ else {
|
|||
print_r( $obj );
|
||||
}
|
||||
|
||||
sqlsrv_query( $conn, "DROP TABLE test_params" );
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
sqlsrv_close( $conn );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
--TEST--
|
||||
Test for fetch_object
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
@ -41,29 +41,22 @@ class foo_noargs
|
|||
} // end class foo_noargs
|
||||
|
||||
sqlsrv_configure( 'WarningsReturnAsErrors', 0 );
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
require( 'MsCommon.inc' );
|
||||
|
||||
$conn = Connect();
|
||||
if( $conn === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "IF OBJECT_ID('test_params', 'U') IS NOT NULL DROP TABLE test_params" );
|
||||
sqlsrv_execute( $stmt );
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "CREATE TABLE test_params (id tinyint, name char(10), [double] float, stuff varchar(max))" );
|
||||
sqlsrv_execute( $stmt );
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
$conn = AE\connect();
|
||||
$tableName = 'test_params';
|
||||
$columns = array(new AE\ColumnMeta('tinyint', 'id'),
|
||||
new AE\ColumnMeta('char(10)', 'name'),
|
||||
new AE\ColumnMeta('float', 'double'),
|
||||
new AE\ColumnMeta('varchar(max)', 'stuff'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$f1 = 1;
|
||||
$f2 = "testtestte";
|
||||
$f3 = 12.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 )); //,
|
||||
//~ array( SQLSRV_SQLTYPE_INTEGER, SQLSRV_SQLTYPE_CHAR(10), SQLSRV_SQLTYPE_DOUBLE, SQLSRV_SQLTYPE_VARBINARY(4000)));
|
||||
$stmt = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
if( !$stmt ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
die( "sqlsrv_prepare failed." );
|
||||
|
@ -85,7 +78,7 @@ if( !is_null( $success )) {
|
|||
$f1 = 2;
|
||||
$f3 = 13.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20more%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
$stmt2 = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$stmt2 = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$success = sqlsrv_execute( $stmt2 );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -102,7 +95,7 @@ if( !is_null( $success )) {
|
|||
$f1 = 3;
|
||||
$f3 = 14.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20more%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
$stmt3 = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$stmt3 = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$success = sqlsrv_execute( $stmt3 );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -119,7 +112,7 @@ if( !is_null( $success )) {
|
|||
$f1 = 4;
|
||||
$f3 = 15.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20more%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
$stmt4 = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$stmt4 = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$success = sqlsrv_execute( $stmt4 );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -136,7 +129,7 @@ if( !is_null( $success )) {
|
|||
$f1 = 5;
|
||||
$f3 = 16.0;
|
||||
$f4 = fopen( "data://text/plain,This%20is%20some%20more%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r" );
|
||||
$stmt5 = sqlsrv_prepare( $conn, "INSERT INTO test_params (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$stmt5 = sqlsrv_prepare( $conn, "INSERT INTO $tableName (id, name, [double], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
$success = sqlsrv_execute( $stmt5 );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -152,7 +145,7 @@ if( !is_null( $success )) {
|
|||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_prepare( $conn, "SELECT id, [double], name, stuff FROM test_params" );
|
||||
$stmt = sqlsrv_prepare( $conn, "SELECT id, [double], name, stuff FROM $tableName" );
|
||||
$success = sqlsrv_execute( $stmt );
|
||||
if( !$success ) {
|
||||
var_dump( sqlsrv_errors() );
|
||||
|
@ -244,7 +237,7 @@ else {
|
|||
print_r( $obj );
|
||||
}
|
||||
|
||||
sqlsrv_query( $conn, "DROP TABLE test_params" );
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
sqlsrv_close( $conn );
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
--TEST--
|
||||
Test for fetch_object with Unicode column name
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
|
@ -41,28 +41,23 @@ class foo_noargs
|
|||
} // end class foo_noargs
|
||||
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 0);
|
||||
//sqlsrv_configure( 'LogSeverity', SQLSRV_LOG_SEVERITY_ALL );
|
||||
//sqlsrv_configure( 'LogSubsystems', SQLSRV_LOG_SYSTEM_ALL );
|
||||
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = connect(array( 'CharacterSet'=>'UTF-8' ));
|
||||
$conn = AE\connect(array( 'CharacterSet'=>'UTF-8' ));
|
||||
$tableName = 'test_params';
|
||||
|
||||
$stmt = sqlsrv_prepare($conn, "IF OBJECT_ID('test_params', 'U') IS NOT NULL DROP TABLE test_params");
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$stmt = sqlsrv_prepare($conn, "CREATE TABLE test_params (id tinyint, 吉安而來 char(10), [此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é] float, stuff varchar(max))");
|
||||
sqlsrv_execute($stmt);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
$columns = array(new AE\ColumnMeta('tinyint', 'id'),
|
||||
new AE\ColumnMeta('char(10)', '吉安而來'),
|
||||
new AE\ColumnMeta('float', '此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é'),
|
||||
new AE\ColumnMeta('varchar(max)', 'stuff'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$f1 = 1;
|
||||
$f2 = "testtestte";
|
||||
$f3 = 12.0;
|
||||
$f4 = fopen("data://text/plain,This%20is%20some%20text%20meant%20to%20test%20binding%20parameters%20to%20streams", "r");
|
||||
|
||||
$stmt = sqlsrv_prepare($conn, "INSERT INTO test_params (id, 吉安而來, [此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 )); //,
|
||||
//~ array( SQLSRV_SQLTYPE_INTEGER, SQLSRV_SQLTYPE_CHAR(10), SQLSRV_SQLTYPE_此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é, SQLSRV_SQLTYPE_VARBINARY(4000)));
|
||||
$stmt = sqlsrv_prepare($conn, "INSERT INTO $tableName (id, 吉安而來, [此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é], stuff) VALUES (?, ?, ?, ?)", array( &$f1, "testtestte", &$f3, &$f4 ));
|
||||
if (!$stmt) {
|
||||
var_dump(sqlsrv_errors());
|
||||
die("sqlsrv_prepare failed.");
|
||||
|
@ -147,7 +142,7 @@ if (!is_null($success)) {
|
|||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$stmt = sqlsrv_prepare($conn, "SELECT id, [此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é], 吉安而來, stuff FROM test_params");
|
||||
$stmt = sqlsrv_prepare($conn, "SELECT id, [此是後話Κοντάוְאַתָּה第十四章BiałopioБунтевсемужирафиtest是أي بزمام الإنذارהნომინავიiałopioБунтевсемужирафиtest父親回衙 汗流如雨 吉安而來. 關雎 誨€¥É§é], 吉安而來, stuff FROM $tableName");
|
||||
$success = sqlsrv_execute($stmt);
|
||||
if (!$success) {
|
||||
var_dump(sqlsrv_errors());
|
||||
|
@ -234,6 +229,11 @@ if (is_null($obj)) {
|
|||
print_r($obj);
|
||||
}
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
sqlsrv_close( $conn );
|
||||
|
||||
?>
|
||||
--EXPECTREGEX--
|
||||
Fetch a stdClass object \(1\)
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
--TEST--
|
||||
sqlsrv_fetch_object() into a class with Unicode column name
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
/* Define the Product class. */
|
||||
// Define the Product classes
|
||||
class Product
|
||||
{
|
||||
public function __construct($ID, $UID)
|
||||
|
@ -56,72 +57,119 @@ class Sample extends Product
|
|||
}
|
||||
}
|
||||
|
||||
function getInputData1($inputs)
|
||||
{
|
||||
return array('ID' => $inputs[0],
|
||||
'личное_имя'=> $inputs[1],
|
||||
'SafetyStockLevel' => $inputs[2],
|
||||
'StockedQty' => $inputs[3],
|
||||
'UnitPrice' => $inputs[4],
|
||||
'DueDate' => $inputs[5],
|
||||
'Color' => $inputs[6]);
|
||||
}
|
||||
|
||||
function getInputData2($inputs)
|
||||
{
|
||||
return array('SerialNumber' => $inputs[0],
|
||||
'Code'=> $inputs[1]);
|
||||
}
|
||||
|
||||
require_once('MsCommon.inc');
|
||||
$tableName = "UnicodeColNameTest";
|
||||
|
||||
include 'MsSetup.inc';
|
||||
|
||||
$conn = connect(array( 'CharacterSet'=>'UTF-8' ));
|
||||
|
||||
$tableName = "UnicodeColNameTest";
|
||||
|
||||
|
||||
$conn = AE\connect(array('CharacterSet'=>'UTF-8'));
|
||||
|
||||
// Create table Purchasing
|
||||
$tableName1 = "Purchasing";
|
||||
$tableName2 = "Country";
|
||||
dropTable($conn, $tableName1);
|
||||
dropTable($conn, $tableName2);
|
||||
$sql = "create table $tableName1 (ID CHAR(4), личное_имя VARCHAR(128), SafetyStockLevel SMALLINT,
|
||||
StockedQty INT, UnitPrice FLOAT, DueDate datetime, Color VARCHAR(20))";
|
||||
sqlsrv_query($conn, $sql) ?: die(print_r(sqlsrv_errors(), true));
|
||||
|
||||
$columns = array(new AE\ColumnMeta('CHAR(4)', 'ID'),
|
||||
new AE\ColumnMeta('VARCHAR(128)', 'личное_имя'),
|
||||
new AE\ColumnMeta('SMALLINT', 'SafetyStockLevel'),
|
||||
new AE\ColumnMeta('INT', 'StockedQty'),
|
||||
new AE\ColumnMeta('FLOAT', 'UnitPrice'),
|
||||
new AE\ColumnMeta('datetime', 'DueDate'),
|
||||
new AE\ColumnMeta('VARCHAR(20)', 'Color'));
|
||||
AE\createTable($conn, $tableName1, $columns);
|
||||
|
||||
// Insert data
|
||||
$sql = "INSERT INTO $tableName1 VALUES
|
||||
('P001','Pencil 2B','102','24','0.24','2016-02-01','Red'),
|
||||
('P002','Notepad','102','12','3.87', '2016-02-21',Null),
|
||||
('P001','Mirror 2\"','652','3','15.99', '2016-02-01',NULL),
|
||||
('P003','USB connector','1652','31','9.99','2016-02-01',NULL)";
|
||||
sqlsrv_query($conn, $sql) ?: die(print_r(sqlsrv_errors(), true));
|
||||
$params = array('P001', 'Pencil 2B', '102', '24', '0.24', '2016-02-01', 'Red');
|
||||
$data = getInputData1($params);
|
||||
AE\insertRow($conn, $tableName1, $data);
|
||||
|
||||
$params = array('P002', 'Notepad', '102', '12', '3.87', '2016-02-21', null);
|
||||
$data = getInputData1($params);
|
||||
AE\insertRow($conn, $tableName1, $data);
|
||||
|
||||
$params = array('P001', 'Mirror 2\"', '652', '3', '15.99', '2016-02-01', null);
|
||||
$data = getInputData1($params);
|
||||
AE\insertRow($conn, $tableName1, $data);
|
||||
|
||||
$params = array('P003', 'USB connector', '1652', '31', '9.99', '2016-02-01', null);
|
||||
$data = getInputData1($params);
|
||||
AE\insertRow($conn, $tableName1, $data);
|
||||
|
||||
// Create table Country
|
||||
$sql = "create table $tableName2 (SerialNumber CHAR(4), Code VARCHAR(2))";
|
||||
sqlsrv_query($conn, $sql) ?: die(print_r(sqlsrv_errors(), true));
|
||||
$columns = array(new AE\ColumnMeta('CHAR(4)', 'SerialNumber'),
|
||||
new AE\ColumnMeta('VARCHAR(2)', 'Code'));
|
||||
AE\createTable($conn, $tableName2, $columns);
|
||||
|
||||
// Insert data
|
||||
$sql = "INSERT INTO $tableName2 VALUES ('P001','FR'),('P002','UK'),('P003','DE')";
|
||||
sqlsrv_query($conn, $sql) ?: die(print_r(sqlsrv_errors(), true));
|
||||
$params = array('P001', 'FR');
|
||||
$data = getInputData2($params);
|
||||
AE\insertRow($conn, $tableName2, $data);
|
||||
|
||||
/* Define the query. */
|
||||
$sql = "SELECT личное_имя, SafetyStockLevel, StockedQty, UnitPrice, Color, Code
|
||||
FROM $tableName1 AS Purchasing
|
||||
JOIN $tableName2 AS Country
|
||||
ON Purchasing.ID = Country.SerialNumber
|
||||
WHERE Purchasing.StockedQty < ?
|
||||
AND Purchasing.UnitPrice < ?
|
||||
AND Purchasing.DueDate= ?";
|
||||
$params = array('P002', 'UK');
|
||||
$data = getInputData2($params);
|
||||
AE\insertRow($conn, $tableName2, $data);
|
||||
|
||||
/* Set the parameter values. */
|
||||
$params = array(100, '10.5', '2016-02-01');
|
||||
$params = array('P003', 'DE');
|
||||
$data = getInputData2($params);
|
||||
AE\insertRow($conn, $tableName2, $data);
|
||||
|
||||
/* Execute the query. */
|
||||
$stmt = sqlsrv_query($conn, $sql, $params, array("Scrollable"=>"static")); //, array("Scrollable"=>"buffered")
|
||||
if (!$stmt) {
|
||||
echo "Error in statement execution.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
// With AE enabled, we cannot do comparisons with encrypted columns
|
||||
// Also, only forward cursor or client buffer is supported
|
||||
if (AE\isColEncrypted()) {
|
||||
$sql = "SELECT личное_имя, SafetyStockLevel, StockedQty, UnitPrice, Color, Code
|
||||
FROM $tableName1 AS Purchasing
|
||||
JOIN $tableName2 AS Country
|
||||
ON Purchasing.ID = Country.SerialNumber
|
||||
WHERE Purchasing.личное_имя != ?
|
||||
AND Purchasing.StockedQty != ?
|
||||
AND Purchasing.DueDate= ?";
|
||||
|
||||
$params = array('Notepad', 3, '2016-02-01');
|
||||
$stmt = sqlsrv_prepare($conn, $sql, $params, array("Scrollable"=>"buffered"));
|
||||
if ($stmt) {
|
||||
$res = sqlsrv_execute($stmt);
|
||||
if (!$res) {
|
||||
fatalError("Error in statement execution.\n");
|
||||
}
|
||||
} else {
|
||||
fatalError("Error in preparing statement.\n");
|
||||
}
|
||||
} else {
|
||||
$sql = "SELECT личное_имя, SafetyStockLevel, StockedQty, UnitPrice, Color, Code
|
||||
FROM $tableName1 AS Purchasing
|
||||
JOIN $tableName2 AS Country
|
||||
ON Purchasing.ID = Country.SerialNumber
|
||||
WHERE Purchasing.StockedQty < ?
|
||||
AND Purchasing.UnitPrice < ?
|
||||
AND Purchasing.DueDate= ?";
|
||||
|
||||
$params = array(100, '10.5', '2016-02-01');
|
||||
$stmt = sqlsrv_query($conn, $sql, $params, array("Scrollable"=>"static"));
|
||||
if (!$stmt) {
|
||||
fatalError("Error in statement execution.\n");
|
||||
}
|
||||
}
|
||||
|
||||
// Iterate through the result set.
|
||||
// $product is an instance of the Product class.
|
||||
$i=0; $hasNext = true;
|
||||
// Iterate through the result set
|
||||
// $product is an instance of the Product class
|
||||
$i=0;
|
||||
$hasNext = true;
|
||||
|
||||
while ($hasNext) {
|
||||
$sample = sqlsrv_fetch_object($stmt, "Sample", array($i+1000), SQLSRV_SCROLL_ABSOLUTE, $i);
|
||||
|
||||
// DEBUG: uncomment to see the SQL_SERVER ERROR
|
||||
// if(!$sample) die( print_r( sqlsrv_errors(), true));
|
||||
|
||||
if (!$sample) {
|
||||
$hasNext = false;
|
||||
} else {
|
||||
|
@ -130,12 +178,10 @@ while ($hasNext) {
|
|||
}
|
||||
}
|
||||
|
||||
// DROP database
|
||||
// $stmt = sqlsrv_query($conn,"DROP DATABASE ". $dbName);
|
||||
//echo $dbName;
|
||||
dropTable($conn, $tableName1);
|
||||
dropTable($conn, $tableName2);
|
||||
// Free statement and connection resources.s
|
||||
dropTable($conn, $tableName1);
|
||||
dropTable($conn, $tableName2);
|
||||
|
||||
// Free statement and connection resources
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
||||
|
|
|
@ -1,30 +1,30 @@
|
|||
--TEST--
|
||||
Test sqlsrv_num_rows method.
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
sqlsrv_configure('WarningsReturnAsErrors', 0);
|
||||
sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL);
|
||||
|
||||
require_once('MsCommon.inc');
|
||||
$conn = connect();
|
||||
$conn = AE\connect();
|
||||
$tableName = 'utf16invalid';
|
||||
|
||||
if (!$conn) {
|
||||
fatalError("Failed to connect.");
|
||||
$columns = array(new AE\ColumnMeta('int', 'id', 'identity'),
|
||||
new AE\ColumnMeta('nvarchar(100)', 'c1'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$stmt = AE\insertRow($conn, $tableName, array("c1" => 'TEST'));
|
||||
|
||||
// Always Encrypted feature only supports SQLSRV_CURSOR_FORWARD or
|
||||
// SQLSRV_CURSOR_CLIENT_BUFFERED
|
||||
if (AE\isColEncrypted()) {
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_CLIENT_BUFFERED);
|
||||
} else {
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_KEYSET);
|
||||
}
|
||||
|
||||
dropTable($conn, 'utf16invalid');
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE utf16invalid (id int identity, c1 nvarchar(100))");
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query($conn, "INSERT INTO utf16invalid (c1) VALUES ('TEST')");
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors()));
|
||||
}
|
||||
$stmt = sqlsrv_query($conn, "SELECT * FROM utf16invalid", array(), array("Scrollable" => SQLSRV_CURSOR_KEYSET ));
|
||||
$stmt = AE\executeQueryEx($conn, "SELECT * FROM $tableName", $options);
|
||||
$row_nums = sqlsrv_num_rows($stmt);
|
||||
|
||||
echo $row_nums;
|
||||
|
|
|
@ -1,30 +1,27 @@
|
|||
--TEST--
|
||||
sqlsrv_fetch_array() using a scrollable cursor
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once("MsCommon.inc");
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
// connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Connection could not be established.\n");
|
||||
}
|
||||
|
||||
$tableName = GetTempTableName();
|
||||
$conn = AE\connect();
|
||||
$tableName = 'test012';
|
||||
|
||||
// Create table
|
||||
$query = "CREATE TABLE $tableName (ID VARCHAR(10))";
|
||||
$stmt = sqlsrv_query($conn, $query);
|
||||
$columns = array(new AE\ColumnMeta('VARCHAR(10)', 'ID'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$query = "INSERT INTO $tableName VALUES ('1998.1'),('-2004'),('2016'),('4.2EUR')";
|
||||
$stmt = sqlsrv_query($conn, $query) ?: die(print_r(sqlsrv_errors(), true));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '1998.1'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '-2004'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '2016'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '4.2EUR'));
|
||||
|
||||
// Fetch data
|
||||
$query = "SELECT ID FROM $tableName";
|
||||
$stmt = sqlsrv_query($conn, $query, [], array("Scrollable"=>"buffered"))
|
||||
?: die(print_r(sqlsrv_errors(), true));
|
||||
$stmt = AE\executeQueryEx($conn, $query, array("Scrollable"=>"buffered"));
|
||||
|
||||
// Fetch first row
|
||||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_NEXT);
|
||||
|
@ -38,6 +35,8 @@ echo $row['ID']."\n";
|
|||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_LAST);
|
||||
echo $row['ID']."\n";
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
print "Done"
|
||||
|
|
|
@ -5,30 +5,27 @@ This test calls sqlsrv_has_rows multiple times. Previously, multiple calls
|
|||
with a forward cursor would advance the cursor. Subsequent fetch calls
|
||||
would then fail.
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once("MsCommon.inc");
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
// connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
fatalError("Connection could not be established.\n");
|
||||
}
|
||||
|
||||
$tableName = GetTempTableName();
|
||||
$conn = AE\connect();
|
||||
$tableName = 'test037';
|
||||
|
||||
// Create table
|
||||
$query = "CREATE TABLE $tableName (ID VARCHAR(10))";
|
||||
$stmt = sqlsrv_query($conn, $query);
|
||||
$columns = array(new AE\ColumnMeta('VARCHAR(10)', 'ID'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$query = "INSERT INTO $tableName VALUES ('1998.1'),('-2004'),('2016'),('4.2EUR')";
|
||||
$stmt = sqlsrv_query($conn, $query) ?: die(print_r(sqlsrv_errors(), true));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '1998.1'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '-2004'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '2016'));
|
||||
AE\insertRow($conn, $tableName, array("ID" => '4.2EUR'));
|
||||
|
||||
// Fetch data using forward only cursor
|
||||
$query = "SELECT ID FROM $tableName";
|
||||
$stmt = sqlsrv_query($conn, $query)
|
||||
?: die(print_r(sqlsrv_errors(), true));
|
||||
$stmt = AE\executeQuery($conn, $query);
|
||||
|
||||
// repeated calls should return true and fetch should work.
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
|
@ -43,8 +40,7 @@ if (sqlsrv_has_rows($stmt)) {
|
|||
}
|
||||
|
||||
// Fetch data using a scrollable cursor
|
||||
$stmt = sqlsrv_query($conn, $query, [], array("Scrollable"=>"buffered"))
|
||||
?: die(print_r(sqlsrv_errors(), true));
|
||||
$stmt = AE\executeQueryEx($conn, $query, array("Scrollable"=>"buffered"));
|
||||
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
|
@ -57,22 +53,21 @@ if (sqlsrv_has_rows($stmt)) {
|
|||
}
|
||||
}
|
||||
|
||||
$query = "SELECT ID FROM $tableName where ID='nomatch'";
|
||||
$stmt = sqlsrv_query($conn, $query)
|
||||
?: die(print_r(sqlsrv_errors(), true));
|
||||
// $query = "SELECT ID FROM $tableName where ID='nomatch'";
|
||||
$stmt = AE\executeQuery($conn, $query, "ID = ?", array('nomatch'));
|
||||
|
||||
// repeated calls should return false if there are no rows.
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
|
||||
// Fetch data using a scrollable cursor
|
||||
$stmt = sqlsrv_query($conn, $query, [], array("Scrollable"=>"buffered"))
|
||||
?: die(print_r(sqlsrv_errors(), true));
|
||||
$stmt = AE\executeQuery($conn, $query, "ID = ?", array('nomatch'), array("Scrollable"=>"buffered"));
|
||||
|
||||
// repeated calls should return false if there are no rows.
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
echo "Has Rows?" . (sqlsrv_has_rows($stmt) ? " Yes!" : " NO!") . "\n";
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
|
|
@ -1,38 +1,27 @@
|
|||
--TEST--
|
||||
GitHub issue #69 - fetching an empty nvarchar using client buffer
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
function print_errors()
|
||||
{
|
||||
die( print_r( sqlsrv_errors(), true));
|
||||
}
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function test()
|
||||
{
|
||||
require_once("MsCommon.inc");
|
||||
|
||||
// Connect
|
||||
$conn = Connect();
|
||||
if( !$conn ) { print_errors(); }
|
||||
|
||||
$sql = "EXEC dbo.sp_executesql
|
||||
N'DECLARE @x nvarchar(max)
|
||||
SET @x = '''' -- empty string
|
||||
SELECT @x AS [Empty_Nvarchar_Max]'";
|
||||
// Connect
|
||||
$conn = AE\connect();
|
||||
|
||||
$stmt = sqlsrv_query($conn, $sql, [], ["Scrollable" => 'buffered']);
|
||||
if (! $stmt) { print_errors(); }
|
||||
$sql = "EXEC dbo.sp_executesql
|
||||
N'DECLARE @x nvarchar(max)
|
||||
SET @x = '''' -- empty string
|
||||
SELECT @x AS [Empty_Nvarchar_Max]'";
|
||||
|
||||
$return = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
print_r($return);
|
||||
|
||||
// Free the statement and connection resources.
|
||||
sqlsrv_free_stmt( $stmt);
|
||||
sqlsrv_close( $conn);
|
||||
}
|
||||
|
||||
test();
|
||||
$stmt = AE\executeQueryEx($conn, $sql, ["Scrollable" => 'buffered']);
|
||||
|
||||
$return = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC);
|
||||
print_r($return);
|
||||
|
||||
// Free the statement and connection resources.
|
||||
sqlsrv_free_stmt( $stmt);
|
||||
sqlsrv_close( $conn);
|
||||
|
||||
print "Done";
|
||||
?>
|
||||
|
|
|
@ -1,61 +1,53 @@
|
|||
--TEST--
|
||||
sqlsrv_fetch() with SQLSRV_SCROLL_ABSOLUTE using out of range offset
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function test()
|
||||
{
|
||||
require_once("MsCommon.inc");
|
||||
// connect
|
||||
$conn = AE\connect();
|
||||
|
||||
// connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
printErrors("Connection could not be established.\n");
|
||||
}
|
||||
// Prepare the statement
|
||||
$sql = "select * from cd_info";
|
||||
$stmt = sqlsrv_prepare($conn, $sql, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
if ($stmt === false) {
|
||||
printErrors();
|
||||
}
|
||||
sqlsrv_execute($stmt);
|
||||
|
||||
// Prepare the statement
|
||||
$sql = "select * from cd_info";
|
||||
$stmt = sqlsrv_prepare($conn, $sql, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
if ($stmt === false) {
|
||||
printErrors();
|
||||
}
|
||||
sqlsrv_execute($stmt);
|
||||
|
||||
// Get row count
|
||||
$row_count = sqlsrv_num_rows($stmt);
|
||||
if ($row_count == 0) {
|
||||
printErrors("There should be at least one row!\n");
|
||||
}
|
||||
|
||||
sqlsrv_execute($stmt);
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if (! $field) {
|
||||
printErrors();
|
||||
}
|
||||
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_LAST);
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if (! $field) {
|
||||
printErrors();
|
||||
}
|
||||
|
||||
// this should return false
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, $row_count);
|
||||
if ($row) {
|
||||
printErrors("This should return false!");
|
||||
}
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if ($field !== false) {
|
||||
printErrors("This should have resulted in error!");
|
||||
}
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
// Get row count
|
||||
$row_count = sqlsrv_num_rows($stmt);
|
||||
if ($row_count == 0) {
|
||||
printErrors("There should be at least one row!\n");
|
||||
}
|
||||
|
||||
test();
|
||||
sqlsrv_execute($stmt);
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_FIRST);
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if (! $field) {
|
||||
printErrors();
|
||||
}
|
||||
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_LAST);
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if (! $field) {
|
||||
printErrors();
|
||||
}
|
||||
|
||||
// this should return false
|
||||
$row = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, $row_count);
|
||||
if ($row) {
|
||||
printErrors("This should return false!");
|
||||
}
|
||||
$field = sqlsrv_get_field($stmt, 0);
|
||||
if ($field !== false) {
|
||||
printErrors("This should have resulted in error!");
|
||||
}
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
||||
print "Done";
|
||||
?>
|
||||
|
|
|
@ -1,10 +1,11 @@
|
|||
--TEST--
|
||||
sqlsrv_has_rows() using a forward and scrollable cursor
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once("MsCommon.inc");
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
function fetchData($conn, $table, $size)
|
||||
{
|
||||
|
@ -27,21 +28,26 @@ function fetchData($conn, $table, $size)
|
|||
}
|
||||
|
||||
// connect
|
||||
$conn = connect();
|
||||
if (!$conn) {
|
||||
printErrors("Connection could not be established.\n");
|
||||
}
|
||||
$conn = AE\connect();
|
||||
|
||||
$tableName1 = GetTempTableName('php_test_table_1');
|
||||
$tableName2 = GetTempTableName('php_test_table_2');
|
||||
$tableName1 = 'php_test_table_1';
|
||||
$tableName2 = 'php_test_table_2';
|
||||
|
||||
// Create table
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName1 ([c1_int] int, [c2_varchar_max] varchar(max))");
|
||||
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName2 ([c1_int] int, [c2_varchar_1036] varchar(1036))");
|
||||
// Create tables
|
||||
$columns = array(new AE\ColumnMeta('int', 'c1_int'),
|
||||
new AE\ColumnMeta('varchar(max)', 'c2_varchar_max'));
|
||||
$stmt = AE\createTable($conn, $tableName1, $columns);
|
||||
|
||||
unset($columns);
|
||||
$columns = array(new AE\ColumnMeta('int', 'c1_int'),
|
||||
new AE\ColumnMeta('varchar(1036)', 'c2_varchar_1036'));
|
||||
$stmt = AE\createTable($conn, $tableName2, $columns);
|
||||
|
||||
// insert > 1KB into c2_varchar_max & c2_varchar_1036 (1036 characters).
|
||||
$stmt = sqlsrv_query($conn, "INSERT INTO $tableName1 (c1_int, c2_varchar_max) VALUES (1, 'This is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a test')");
|
||||
$stmt = sqlsrv_query($conn, "INSERT INTO $tableName2 (c1_int, c2_varchar_1036) VALUES (1, 'This is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a test')");
|
||||
$longString = 'This is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a testThis is a test';
|
||||
|
||||
$stmt = AE\insertRow($conn, $tableName1, array('c1_int' => 1, 'c2_varchar_max' => $longString));
|
||||
$stmt = AE\insertRow($conn, $tableName2, array('c1_int' => 1, 'c2_varchar_1036' => $longString));
|
||||
|
||||
// set client buffer size to 0KB returns false
|
||||
$ret = sqlsrv_configure('ClientBufferMaxKBSize', 0);
|
||||
|
|
|
@ -3,16 +3,28 @@ Read numeric types from SQLSRV with buffered query.
|
|||
--DESCRIPTION--
|
||||
Test numeric conversion (number to string, string to number) functionality for buffered queries with SQLSRV.
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
require_once("MsCommon.inc");
|
||||
|
||||
$conn = connect(array("CharacterSet"=>"utf-8"));
|
||||
if (!$conn) {
|
||||
printErrors("Connection could not be established.\n");
|
||||
function getInputData($inputs)
|
||||
{
|
||||
return array('a' => $inputs[0],
|
||||
'neg_a'=> $inputs[1],
|
||||
'b' => $inputs[2],
|
||||
'neg_b' => $inputs[3],
|
||||
'c' => $inputs[4],
|
||||
'neg_c' => $inputs[5],
|
||||
'zero' => $inputs[6],
|
||||
'zerof' => $inputs[7],
|
||||
'zerod' => $inputs[8]);
|
||||
}
|
||||
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = AE\connect(array("CharacterSet"=>"utf-8"));
|
||||
$tableName = 'test230';
|
||||
|
||||
$sample = 1234567890.1234;
|
||||
$sample1 = -1234567890.1234;
|
||||
$sample2 = 1;
|
||||
|
@ -20,34 +32,29 @@ $sample3 = -1;
|
|||
$sample4 = 0.5;
|
||||
$sample5 = -0.55;
|
||||
|
||||
$query = 'CREATE TABLE #TESTTABLE (a float(53), neg_a float(53), b int, neg_b int, c decimal(16, 6), neg_c decimal(16, 6), zero int, zerof float(53), zerod decimal(16,6))';
|
||||
|
||||
// Create table
|
||||
$stmt = sqlsrv_query($conn, $query);
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$columns = array(new AE\ColumnMeta('float(53)', 'a'),
|
||||
new AE\ColumnMeta('float(53)', 'neg_a'),
|
||||
new AE\ColumnMeta('int', 'b'),
|
||||
new AE\ColumnMeta('int', 'neg_b'),
|
||||
new AE\ColumnMeta('decimal(16, 6)', 'c'),
|
||||
new AE\ColumnMeta('decimal(16, 6)', 'neg_c'),
|
||||
new AE\ColumnMeta('int', 'zero'),
|
||||
new AE\ColumnMeta('float(53)', 'zerof'),
|
||||
new AE\ColumnMeta('decimal(16, 6)', 'zerod'));
|
||||
AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$query = 'INSERT INTO #TESTTABLE (a, neg_a, b, neg_b, c, neg_c, zero, zerof, zerod) VALUES(?, ?, ?, ?, ?, ?, 0, 0, 0)';
|
||||
$params = array($sample, $sample1, $sample2, $sample3, $sample4, $sample5);
|
||||
$res = null;
|
||||
$params = array($sample, $sample1, $sample2, $sample3, $sample4, $sample5, 0, 0, 0);
|
||||
$data = getInputData($params);
|
||||
AE\insertRow($conn, $tableName, $data, $res, AE\INSERT_QUERY_PARAMS);
|
||||
|
||||
$stmt = sqlsrv_query($conn, $query, $params);
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$params = array($sample4, $sample5, 100000, -1234567, $sample, $sample1);
|
||||
$stmt = sqlsrv_query($conn, $query, $params);
|
||||
if ($stmt === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$params = array($sample4, $sample5, 100000, -1234567, $sample, $sample1, 0, 0, 0);
|
||||
$data = getInputData($params);
|
||||
AE\insertRow($conn, $tableName, $data, $res, AE\INSERT_QUERY_PARAMS);
|
||||
|
||||
$query = 'SELECT TOP 2 * FROM #TESTTABLE';
|
||||
$stmt = sqlsrv_query($conn, $query, array(), array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
if (!$stmt) {
|
||||
echo "Statement could not be prepared.\n";
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
sqlsrv_execute($stmt);
|
||||
$query = "SELECT TOP 2 * FROM $tableName";
|
||||
$stmt = AE\executeQueryEx($conn, $query, array("Scrollable"=>SQLSRV_CURSOR_CLIENT_BUFFERED));
|
||||
|
||||
$array = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC);
|
||||
var_dump($array);
|
||||
|
@ -73,6 +80,8 @@ for ($i = 0; $i < $rowcount; $i++) {
|
|||
}
|
||||
}
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
|
||||
sqlsrv_free_stmt($stmt);
|
||||
sqlsrv_close($conn);
|
||||
|
||||
|
|
|
@ -3,12 +3,13 @@ GitHub issue #330 - get numrow of null buffered result set
|
|||
--DESCRIPTION--
|
||||
A variation of the example in GitHub issue 330. A -1 value returned as numrow of a null buffered result set.
|
||||
--SKIPIF--
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
require_once("MsCommon.inc");
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
// connect
|
||||
$conn = connect() ?: fatalError("Failed to connect");
|
||||
$conn = AE\connect();
|
||||
|
||||
$stmt = sqlsrv_query($conn, "IF EXISTS (SELECT * FROM [sys].[objects] WHERE (name LIKE 'non_existent_table_name%') AND type in (N'U'))
|
||||
BEGIN
|
||||
|
|
|
@ -1,249 +1,210 @@
|
|||
--TEST--
|
||||
scrollable result sets.
|
||||
--SKIPIF--
|
||||
<?php require('skipif.inc'); ?>
|
||||
<?php require('skipif_versions_old.inc'); ?>
|
||||
--FILE--
|
||||
<?php
|
||||
|
||||
sqlsrv_configure( 'WarningsReturnAsErrors', false );
|
||||
sqlsrv_configure( 'LogSeverity', SQLSRV_LOG_SEVERITY_ALL );
|
||||
sqlsrv_configure('WarningsReturnAsErrors', false);
|
||||
sqlsrv_configure('LogSeverity', SQLSRV_LOG_SEVERITY_ALL);
|
||||
|
||||
require( 'MsCommon.inc' );
|
||||
require_once('MsCommon.inc');
|
||||
|
||||
$conn = Connect();
|
||||
if( $conn === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "IF OBJECT_ID('ScrollTest', 'U') IS NOT NULL DROP TABLE ScrollTest" );
|
||||
if( $stmt !== false ) { sqlsrv_free_stmt( $stmt ); }
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "CREATE TABLE ScrollTest (id int, value char(10))" );
|
||||
if( $stmt === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows == true ) {
|
||||
die( "Shouldn't have rows" );
|
||||
}
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 1, "Row 1" ));
|
||||
if( $stmt === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows == true ) {
|
||||
die( "Shouldn't have rows" );
|
||||
}
|
||||
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 2, "Row 2" ));
|
||||
if( $stmt === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows == true ) {
|
||||
die( "Shouldn't have rows" );
|
||||
}
|
||||
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 3, "Row 3" ));
|
||||
if( $stmt === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows == true ) {
|
||||
die( "Shouldn't have rows" );
|
||||
}
|
||||
$stmt = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 4, "Row 4" ));
|
||||
if( $stmt === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows == true ) {
|
||||
die( "Shouldn't have rows" );
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'static' ));
|
||||
|
||||
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, 4 );
|
||||
if( $result !== null ) {
|
||||
die( "Should have failed with an invalid row number" );
|
||||
}
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows != true ) {
|
||||
die( "Should have rows" );
|
||||
}
|
||||
print_r( sqlsrv_errors() );
|
||||
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, -1 );
|
||||
if( $result !== null ) {
|
||||
die( "Should have failed with an invalid row number" );
|
||||
}
|
||||
print_r( sqlsrv_errors() );
|
||||
|
||||
$rows = sqlsrv_rows_affected( $stmt );
|
||||
print_r( sqlsrv_errors() );
|
||||
|
||||
$rows = sqlsrv_num_rows( $stmt );
|
||||
echo "Query returned $rows rows\n";
|
||||
|
||||
$row = 3;
|
||||
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, $row );
|
||||
do {
|
||||
$result = sqlsrv_fetch( $stmt, SQLSRV_SCROLL_ABSOLUTE, $row );
|
||||
if( $result === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
function hasRows($stmt, $expectedFail)
|
||||
{
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if ($expectedFail) {
|
||||
if ($rows == true) {
|
||||
die("Shouldn't have rows");
|
||||
}
|
||||
} else {
|
||||
if ($rows != true) {
|
||||
die("Should have rows");
|
||||
}
|
||||
}
|
||||
$field1 = sqlsrv_get_field( $stmt, 0 );
|
||||
$field2 = sqlsrv_get_field( $stmt, 1 );
|
||||
echo "$field1 $field2\n";
|
||||
$row = $row - 1;
|
||||
} while( $row >= 0 );
|
||||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => SQLSRV_CURSOR_FORWARD ));
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows != true ) {
|
||||
die( "Should have rows" );
|
||||
}
|
||||
$row_count = 0;
|
||||
while( $row = sqlsrv_fetch( $stmt )) {
|
||||
|
||||
function countRows($stmt, $numRows, $cursorType, $initialCount = 0)
|
||||
{
|
||||
$row_count = $initialCount;
|
||||
while ($row = sqlsrv_fetch($stmt)) {
|
||||
++$row_count;
|
||||
}
|
||||
if( $row === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
echo "$row_count rows retrieved on the forward only cursor\n";
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'static' ));
|
||||
$rows = sqlsrv_has_rows( $stmt );
|
||||
if( $rows != true ) {
|
||||
die( "Should have rows" );
|
||||
}
|
||||
$row_count = 0;
|
||||
while( $row = sqlsrv_fetch( $stmt )) {
|
||||
++$row_count;
|
||||
}
|
||||
if( $row === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
echo "$row_count rows retrieved on the static cursor\n";
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => 'dynamic' ));
|
||||
|
||||
sqlsrv_fetch( $stmt );
|
||||
sqlsrv_fetch( $stmt );
|
||||
|
||||
$stmt2 = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 5, "Row 5" ));
|
||||
if( $stmt2 === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$stmt2 = sqlsrv_query( $conn, "INSERT INTO ScrollTest (id, value) VALUES(?,?)", array( 6, "Row 6" ));
|
||||
if( $stmt2 === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
if($row === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
if ($row_count != $numRows) {
|
||||
echo "ERROR: $row_count rows retrieved on the $cursorType cursor\n";
|
||||
}
|
||||
}
|
||||
|
||||
$row_count = 2; // for the two fetches above
|
||||
while( sqlsrv_fetch( $stmt )) {
|
||||
++$row_count;
|
||||
}
|
||||
echo "$row_count rows retrieved on the dynamic cursor\n";
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
function insertOneRow($conn, $tableName, $idx, $expectedFail)
|
||||
{
|
||||
$res = null;
|
||||
$stmt = AE\insertRow($conn, $tableName, array('id' => $idx, 'value' => 'Row ' . $idx), $res, AE\INSERT_QUERY_PARAMS);
|
||||
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => SQLSRV_CURSOR_STATIC ));
|
||||
$row_count = sqlsrv_num_rows( $stmt );
|
||||
if( $row_count != 6 ) {
|
||||
die( "sqlsrv_num_rows should have returned 6 rows in the static cursor\n" );
|
||||
}
|
||||
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, -1 );
|
||||
if( $row !== null ) {
|
||||
die( "sqlsrv_fetch_array should have returned null\n" );
|
||||
if (!$stmt || $res === false) {
|
||||
fatalError("failed to insert row $idx!\n");
|
||||
}
|
||||
hasRows($stmt, $expectedFail);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
}
|
||||
|
||||
$row = sqlsrv_fetch_array( $stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, 6 );
|
||||
if( $row !== null ) {
|
||||
die( "sqlsrv_fetch_array should have returned null\n" );
|
||||
$conn = AE\connect();
|
||||
$tableName = 'ScrollTest';
|
||||
$numRows = 4;
|
||||
|
||||
$columns = array(new AE\ColumnMeta('int', 'id'),
|
||||
new AE\ColumnMeta('char(10)', 'value'));
|
||||
$stmt = AE\createTable($conn, $tableName, $columns);
|
||||
|
||||
$rows = sqlsrv_has_rows($stmt);
|
||||
if($rows == true) {
|
||||
die("Shouldn't have rows");
|
||||
}
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
for ($i = 1; $i <= $numRows; $i++) {
|
||||
insertOneRow($conn, $tableName, $i, true);
|
||||
}
|
||||
|
||||
$stmt = sqlsrv_query( $conn, "SELECT * FROM ScrollTest", array(), array( "Scrollable" => SQLSRV_CURSOR_DYNAMIC ));
|
||||
// Always Encrypted feature only supports SQLSRV_CURSOR_FORWARD, so skip the rest of the test
|
||||
// when AE is enabled
|
||||
// https://github.com/Microsoft/msphpsql/wiki/Features#aelimitation
|
||||
$query = "SELECT * FROM $tableName";
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_FORWARD);
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
hasRows($stmt, false);
|
||||
countRows($stmt, $numRows, 'forward only');
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$result = sqlsrv_num_rows( $stmt );
|
||||
if( $result !== false ) {
|
||||
die( "sqlsrv_num_rows should have failed for a dynamic cursor." );
|
||||
}
|
||||
sqlsrv_fetch( $stmt );
|
||||
sqlsrv_fetch( $stmt );
|
||||
if (! AE\isColEncrypted()) {
|
||||
$options = array('Scrollable' => 'static');
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
|
||||
$stmt2 = sqlsrv_query( $conn, "DELETE FROM ScrollTest WHERE id = 2" );
|
||||
if( $stmt2 === false ) {
|
||||
die( print_r( sqlsrv_errors(), true ));
|
||||
}
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, 4);
|
||||
if($result !== null) {
|
||||
die("Should have failed with an invalid row number");
|
||||
}
|
||||
hasRows($stmt, false);
|
||||
// this is empty
|
||||
print_r(sqlsrv_errors());
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, -1);
|
||||
if($result !== null) {
|
||||
die("Should have failed with an invalid row number");
|
||||
}
|
||||
// this is empty
|
||||
print_r(sqlsrv_errors());
|
||||
|
||||
$row = sqlsrv_get_field( $stmt, 0 );
|
||||
if( $row !== false ) {
|
||||
die( "Should have returned false retrieving a field deleted by another query\n" );
|
||||
}
|
||||
echo "sqlsrv_get_field returned false when retrieving a field deleted by another query\n";
|
||||
print_r( sqlsrv_errors() );
|
||||
// expected an error here
|
||||
$rows = sqlsrv_rows_affected($stmt);
|
||||
$message = !empty(sqlsrv_errors()) ? sqlsrv_errors()[0]['message'] : '';
|
||||
$expected = 'This function only works with statements that are not scrollable.';
|
||||
if (strcmp($message, $expected)) {
|
||||
echo "Expected this error message: \'$expected\'\nbut it is: \'$message\'\n";
|
||||
}
|
||||
|
||||
// verify the sqlsrv_fetch_object is working
|
||||
$obj = sqlsrv_fetch_object( $stmt, null, array(null), SQLSRV_SCROLL_LAST, 1 );
|
||||
|
||||
if( $obj === false ) {
|
||||
$rows = sqlsrv_num_rows($stmt);
|
||||
if ($rows != $numRows) {
|
||||
echo "Error: Query returned $rows rows\n";
|
||||
}
|
||||
|
||||
print_r( sqlsrv_errors() );
|
||||
$row = 3;
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, $row);
|
||||
do {
|
||||
$result = sqlsrv_fetch($stmt, SQLSRV_SCROLL_ABSOLUTE, $row);
|
||||
if($result === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
$field1 = sqlsrv_get_field($stmt, 0);
|
||||
$field2 = sqlsrv_get_field($stmt, 1);
|
||||
$idx = $row + 1;
|
||||
|
||||
if ($field1 != $idx || trim($field2) != "Row $idx")
|
||||
echo "Field values unexpected $field1 $field2!\n";
|
||||
|
||||
$row = $row - 1;
|
||||
} while($row >= 0);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$options = array('Scrollable' => 'static');
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
hasRows($stmt, false);
|
||||
countRows($stmt, $numRows, 'static');
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$options = array('Scrollable' => 'dynamic');
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
|
||||
sqlsrv_fetch($stmt);
|
||||
sqlsrv_fetch($stmt);
|
||||
|
||||
insertOneRow($conn, $tableName, 5, true);
|
||||
insertOneRow($conn, $tableName, 6, true);
|
||||
$numRows = 6;
|
||||
|
||||
// to account for the two fetches above
|
||||
countRows($stmt, $numRows, 'dynamic', 2);
|
||||
sqlsrv_free_stmt($stmt);
|
||||
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_STATIC);
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
$row_count = sqlsrv_num_rows($stmt);
|
||||
if($row_count != $numRows) {
|
||||
die("sqlsrv_num_rows should have returned 6 rows in the static cursor\n");
|
||||
}
|
||||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, -1);
|
||||
if($row !== null) {
|
||||
die("sqlsrv_fetch_array should have returned null\n");
|
||||
}
|
||||
|
||||
$row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_ASSOC, SQLSRV_SCROLL_ABSOLUTE, 6);
|
||||
if($row !== null) {
|
||||
die("sqlsrv_fetch_array should have returned null\n");
|
||||
}
|
||||
|
||||
$options = array('Scrollable' => SQLSRV_CURSOR_DYNAMIC);
|
||||
$stmt = AE\executeQueryEx($conn, $query, $options);
|
||||
|
||||
$result = sqlsrv_num_rows($stmt);
|
||||
if($result !== false) {
|
||||
die("sqlsrv_num_rows should have failed for a dynamic cursor.");
|
||||
}
|
||||
sqlsrv_fetch($stmt);
|
||||
sqlsrv_fetch($stmt);
|
||||
|
||||
$stmt2 = sqlsrv_query($conn, "DELETE FROM ScrollTest WHERE id = 2");
|
||||
if($stmt2 === false) {
|
||||
die(print_r(sqlsrv_errors(), true));
|
||||
}
|
||||
|
||||
$row = sqlsrv_get_field($stmt, 0);
|
||||
if($row !== false) {
|
||||
die("sqlsrv_get_field should have returned false retrieving a field deleted by another query");
|
||||
}
|
||||
$error = sqlsrv_errors()[0];
|
||||
$message = $error['message'];
|
||||
$sqlstate = $error['SQLSTATE'];
|
||||
if (strcmp($sqlstate, 'HY109') || strpos($message, 'Invalid cursor position') === false) {
|
||||
die("Unexpected SQL state $sqlstate or error \'$message\'");
|
||||
}
|
||||
|
||||
// verify the sqlsrv_fetch_object is working
|
||||
$obj = sqlsrv_fetch_object($stmt, null, array(null), SQLSRV_SCROLL_LAST, 1);
|
||||
if($obj === false) {
|
||||
print_r(sqlsrv_errors());
|
||||
} else {
|
||||
if ($obj->id != $numRows || trim($obj->value) != "Row $numRows")
|
||||
echo "Field values unexpected $obj->id $obj->value!\n";
|
||||
}
|
||||
sqlsrv_free_stmt($stmt);
|
||||
}
|
||||
print_r( $obj );
|
||||
|
||||
sqlsrv_query( $conn, "DROP TABLE ScrollTest" );
|
||||
|
||||
sqlsrv_free_stmt( $stmt );
|
||||
|
||||
sqlsrv_close( $conn );
|
||||
|
||||
dropTable($conn, $tableName);
|
||||
sqlsrv_close($conn);
|
||||
|
||||
echo "Test succeeded.\n";
|
||||
|
||||
?>
|
||||
--EXPECTREGEX--
|
||||
Array
|
||||
\(
|
||||
\[0\] => Array
|
||||
\(
|
||||
\[0\] => IMSSP
|
||||
\[SQLSTATE\] => IMSSP
|
||||
\[1\] => \-51
|
||||
\[code\] => \-51
|
||||
\[2\] => This function only works with statements that are not scrollable\.
|
||||
\[message\] => This function only works with statements that are not scrollable\.
|
||||
\)
|
||||
|
||||
\)
|
||||
Query returned 4 rows
|
||||
4 Row 4
|
||||
3 Row 3
|
||||
2 Row 2
|
||||
1 Row 1
|
||||
4 rows retrieved on the forward only cursor
|
||||
4 rows retrieved on the static cursor
|
||||
6 rows retrieved on the dynamic cursor
|
||||
sqlsrv_get_field returned false when retrieving a field deleted by another query
|
||||
Array
|
||||
\(
|
||||
\[0\] => Array
|
||||
\(
|
||||
\[0\] => HY109
|
||||
\[SQLSTATE\] => HY109
|
||||
\[1\] => 0
|
||||
\[code\] => 0
|
||||
\[2\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Invalid cursor position
|
||||
\[message\] => \[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Invalid cursor position
|
||||
\)
|
||||
|
||||
\)
|
||||
stdClass Object
|
||||
\(
|
||||
\[id\] => 6
|
||||
\[value\] => Row 6
|
||||
\)
|
||||
Test succeeded\.
|
||||
--EXPECT--
|
||||
Test succeeded.
|
||||
|
|
Loading…
Reference in a new issue