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