Merge pull request #354 from v-kaywon/cover_pdo_dbh
increase coverage for pdo_dbh.cpp
This commit is contained in:
commit
012b16a64f
49
test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt
Normal file
49
test/pdo_sqlsrv/pdo_construct_TransactionIsolation.phpt
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::__Construct connection option TransactionIsolation
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
function Connect($value) {
|
||||||
|
require("autonomous_setup.php");
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName;" .
|
||||||
|
"Database = $database;" .
|
||||||
|
"TransactionIsolation = $value";
|
||||||
|
$conn = new PDO( $dsn, $username, $password );
|
||||||
|
$conn = NULL;
|
||||||
|
echo "Test Successful\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// TEST BEGIN
|
||||||
|
try {
|
||||||
|
Connect("READ_UNCOMMITTED");
|
||||||
|
Connect("READ_COMMITTED");
|
||||||
|
Connect("REPEATABLE_READ");
|
||||||
|
Connect("SNAPSHOT");
|
||||||
|
Connect("SERIALIZABLE");
|
||||||
|
Connect("INVALID_KEY");
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
Test Successful
|
||||||
|
Test Successful
|
||||||
|
Test Successful
|
||||||
|
Test Successful
|
||||||
|
Test Successful
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "IMSSP"
|
||||||
|
[1]=>
|
||||||
|
int(-63)
|
||||||
|
[2]=>
|
||||||
|
string(88) "An invalid value was specified for the keyword 'TransactionIsolation' in the DSN string."
|
||||||
|
}
|
53
test/pdo_sqlsrv/pdo_construct_attr.phpt
Normal file
53
test/pdo_sqlsrv/pdo_construct_attr.phpt
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::__Construct by passing different connection attributes
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$attr = array( PDO::SQLSRV_ATTR_ENCODING => 3,
|
||||||
|
PDO::ATTR_CASE => 2,
|
||||||
|
PDO::ATTR_PREFETCH => false,
|
||||||
|
PDO::ATTR_TIMEOUT => 35,
|
||||||
|
PDO::ATTR_STRINGIFY_FETCHES => true,
|
||||||
|
PDO::SQLSRV_ATTR_DIRECT_QUERY => true,
|
||||||
|
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC,
|
||||||
|
PDO::ATTR_ORACLE_NULLS => PDO::NULL_NATURAL,
|
||||||
|
PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE => 10240,
|
||||||
|
PDO::SQLSRV_ATTR_DIRECT_QUERY => true
|
||||||
|
);
|
||||||
|
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
|
||||||
|
$conn = new PDO( $dsn, $username, $password, $attr);
|
||||||
|
|
||||||
|
$stmt = $conn->prepare("SELECT 1");
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
// fetch result, which should be stringified since ATTR_STRINGIFY_FETCHES is on
|
||||||
|
var_dump(($stmt->fetch(PDO::FETCH_ASSOC)));
|
||||||
|
|
||||||
|
$stmt = NULL;
|
||||||
|
$conn = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
array(1) {
|
||||||
|
[""]=>
|
||||||
|
string(1) "1"
|
||||||
|
}
|
||||||
|
Test Successful
|
42
test/pdo_sqlsrv/pdo_construct_conn_options.phpt
Normal file
42
test/pdo_sqlsrv/pdo_construct_conn_options.phpt
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::__Construct by passing connection options
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName;" .
|
||||||
|
"ConnectionPooling = false;" .
|
||||||
|
"APP = whatever;" .
|
||||||
|
"LoginTimeout = 1;" .
|
||||||
|
"ApplicationIntent = ReadOnly;" .
|
||||||
|
"Database = $database;" .
|
||||||
|
"Encrypt = false;" .
|
||||||
|
"Failover_Partner = whatever;" .
|
||||||
|
"MultipleActiveResultSets = true;" .
|
||||||
|
"MultiSubnetFailover = NO;" .
|
||||||
|
"QuotedId = false;" .
|
||||||
|
"TraceFile = whatever;" .
|
||||||
|
"TraceOn = true;" .
|
||||||
|
"TrustServerCertificate = false;" .
|
||||||
|
"WSID = whatever;"
|
||||||
|
;
|
||||||
|
$conn = new PDO( $dsn, $username, $password);
|
||||||
|
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
Test Successful
|
123
test/pdo_sqlsrv/pdo_construct_dsn_error.phpt
Normal file
123
test/pdo_sqlsrv/pdo_construct_dsn_error.phpt
Normal file
|
@ -0,0 +1,123 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::__Construct with incorrectly formatted DSN or no Server specified in DSN
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
/*----------Connection option cases that raises errors----------*/
|
||||||
|
//dsn with 2 consecutive semicolons
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server = $serverName;;", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//dsn with double right curly braces
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}}", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//dsn with double right curly braces and semicolon
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}};", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//dsn with right curly braces and other symbol
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}?", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//dsn with no equal sign in one option
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
//dsn with no keys
|
||||||
|
try
|
||||||
|
{
|
||||||
|
// Try to connect with no server specific
|
||||||
|
@$conn = new PDO( "sqlsrv:", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
// Try to connect with no server specified
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
@$conn = new PDO( "sqlsrv:Database = $database", $username, $password );
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
echo "\n";
|
||||||
|
/*----------Connection option cases that is OK----------*/
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
//dsn with curly braces
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb}", $username, $password );
|
||||||
|
echo "value in curly braces OK\n";
|
||||||
|
|
||||||
|
//dsn with curly braces and semicolon
|
||||||
|
@$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb};", $username, $password );
|
||||||
|
echo "value in curly braces followed by a semicolon OK\n";
|
||||||
|
|
||||||
|
//dsn with curly braces and trailing spaces
|
||||||
|
@$conn = new PDO( "sqlsrv:Server =$serverName; Database = {tempdb} ", $username, $password );
|
||||||
|
echo "value in curly braces followed by trailing spaces OK\n";
|
||||||
|
|
||||||
|
//dsn with no value specified and ends with semicolon
|
||||||
|
$conn = new PDO( "sqlsrv:Server =$serverName; Database = ;", $username, $password );
|
||||||
|
echo "dsn with no value specified and ends with semicolon OK\n";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
print_r( ($e->errorInfo)[2] );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECTREGEX--
|
||||||
|
|
||||||
|
An extra semi-colon was encountered in the DSN string at character \(byte-count\) position '[0-9]+' \.
|
||||||
|
An unescaped right brace \(\}\) was found in the DSN string for keyword 'Database'\. All right braces must be escaped with another right brace \(\}\}\)\.
|
||||||
|
An expected right brace \(\}\) was not found in the DSN string for the value of the keyword 'Database'\.
|
||||||
|
An invalid value was specified for the keyword 'Database' in the DSN string\.
|
||||||
|
The DSN string ended unexpectedly\.
|
||||||
|
An invalid DSN string was specified\.
|
||||||
|
Server keyword was not specified in the DSN string\.
|
||||||
|
|
||||||
|
value in curly braces OK
|
||||||
|
value in curly braces followed by a semicolon OK
|
||||||
|
value in curly braces followed by trailing spaces OK
|
||||||
|
dsn with no value specified and ends with semicolon OK
|
29
test/pdo_sqlsrv/pdo_exec_invalid_query.phpt
Normal file
29
test/pdo_sqlsrv/pdo_exec_invalid_query.phpt
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
--TEST--
|
||||||
|
direct execution of an invalid query
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
$conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password);
|
||||||
|
|
||||||
|
$conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1");
|
||||||
|
|
||||||
|
// execute a query with typo (spelling error in CREATE)
|
||||||
|
$conn->exec("CRETE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) ");
|
||||||
|
print_r( $conn->errorCode() );
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// execute a properly formatted query
|
||||||
|
$conn->exec("CREATE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) ");
|
||||||
|
print_r( $conn->errorCode() );
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// drop table1 and free connections
|
||||||
|
$conn->exec("DROP TABLE table1");
|
||||||
|
$conn = NULL;
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
42000
|
||||||
|
00000
|
38
test/pdo_sqlsrv/pdo_get_attr_invalid.phpt
Normal file
38
test/pdo_sqlsrv/pdo_get_attr_invalid.phpt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
--TEST--
|
||||||
|
Test getting invalid attributes
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
|
||||||
|
$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
|
||||||
|
|
||||||
|
@$conn->getAttribute( PDO::ATTR_FETCH_TABLE_NAMES );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
@$conn->getAttribute( PDO::ATTR_CURSOR );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
@$conn->getAttribute( PDO::ATTR_CONNECTION_STATUS );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
catch ( PDOException $e ){
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
An unsupported attribute was designated on the PDO object.
|
||||||
|
The given attribute is only supported on the PDOStatement object.
|
||||||
|
An invalid attribute was designated on the PDO object.
|
223
test/pdo_sqlsrv/pdo_get_set_attr.phpt
Normal file
223
test/pdo_sqlsrv/pdo_get_set_attr.phpt
Normal file
|
@ -0,0 +1,223 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::setAttribute() and PDO::getAttribute() methods.
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
// A custom PDO statement class to test PDO::ATTR_STATEMENT_CLASS
|
||||||
|
class CustomPDOStatement extends PDOStatement
|
||||||
|
{
|
||||||
|
protected function __construct() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_attr( $conn, $attr )
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
echo "Get Result $attr :\n";
|
||||||
|
$result = $conn->getAttribute( constant($attr) );
|
||||||
|
var_dump( $result);
|
||||||
|
}
|
||||||
|
catch ( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_attr( $conn, $attr, $val )
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
echo "Set Result $attr :\n";
|
||||||
|
$result = $conn->setAttribute( constant($attr), $val );
|
||||||
|
var_dump( $result);
|
||||||
|
}
|
||||||
|
catch ( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_get_attr($testName, $conn, $attr, $val)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
echo "\n". $testName . ":\n";
|
||||||
|
set_attr($conn, $attr, $val );
|
||||||
|
get_attr($conn, $attr );
|
||||||
|
}
|
||||||
|
catch(PDOException $e)
|
||||||
|
{
|
||||||
|
var_dump($e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password);
|
||||||
|
$values = array ( "PDO::ATTR_ERRMODE" => 2,
|
||||||
|
"PDO::ATTR_SERVER_VERSION" => "whatever",
|
||||||
|
"PDO::ATTR_DRIVER_NAME" => "whatever",
|
||||||
|
"PDO::ATTR_STRINGIFY_FETCHES" => true,
|
||||||
|
"PDO::ATTR_CLIENT_VERSION" => "whatever",
|
||||||
|
"PDO::ATTR_SERVER_INFO" => "whatever",
|
||||||
|
"PDO::ATTR_CASE" => PDO::CASE_LOWER,
|
||||||
|
"PDO::SQLSRV_ATTR_ENCODING" => PDO::SQLSRV_ENCODING_SYSTEM,
|
||||||
|
"PDO::ATTR_DEFAULT_FETCH_MODE" => PDO::FETCH_ASSOC,
|
||||||
|
"PDO::ATTR_ORACLE_NULLS" => PDO::NULL_NATURAL,
|
||||||
|
"PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE" => 5120,
|
||||||
|
"PDO::SQLSRV_ATTR_DIRECT_QUERY" => true,
|
||||||
|
"PDO::ATTR_STATEMENT_CLASS" => array('CustomPDOStatement', array()),
|
||||||
|
"PDO::SQLSRV_ATTR_QUERY_TIMEOUT" => 10,
|
||||||
|
"PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE" => false
|
||||||
|
);
|
||||||
|
|
||||||
|
$attributes = array ( "PDO::ATTR_ERRMODE",
|
||||||
|
"PDO::ATTR_SERVER_VERSION",
|
||||||
|
"PDO::ATTR_DRIVER_NAME",
|
||||||
|
"PDO::ATTR_STRINGIFY_FETCHES",
|
||||||
|
"PDO::ATTR_CLIENT_VERSION",
|
||||||
|
"PDO::ATTR_SERVER_INFO",
|
||||||
|
"PDO::ATTR_CASE",
|
||||||
|
"PDO::SQLSRV_ATTR_ENCODING",
|
||||||
|
"PDO::ATTR_DEFAULT_FETCH_MODE",
|
||||||
|
"PDO::ATTR_ORACLE_NULLS",
|
||||||
|
"PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE",
|
||||||
|
"PDO::SQLSRV_ATTR_DIRECT_QUERY",
|
||||||
|
"PDO::ATTR_STATEMENT_CLASS",
|
||||||
|
"PDO::SQLSRV_ATTR_QUERY_TIMEOUT",
|
||||||
|
"PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE"
|
||||||
|
);
|
||||||
|
$i = 1;
|
||||||
|
foreach( $attributes as $attr )
|
||||||
|
{
|
||||||
|
$testName = "Test_". $i;
|
||||||
|
$i = $i + 1;
|
||||||
|
set_get_attr($testName, $conn, $attr, $values[$attr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
|
||||||
|
var_dump( $e );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECTREGEX--
|
||||||
|
|
||||||
|
Test_1:
|
||||||
|
Set Result PDO::ATTR_ERRMODE :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_ERRMODE :
|
||||||
|
int\(2\)
|
||||||
|
|
||||||
|
Test_2:
|
||||||
|
Set Result PDO::ATTR_SERVER_VERSION :
|
||||||
|
SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object.
|
||||||
|
Get Result PDO::ATTR_SERVER_VERSION :
|
||||||
|
string\([0-9]*\) "[0-9]{2}.[0-9]{2}.[0-9]{4}"
|
||||||
|
|
||||||
|
Test_3:
|
||||||
|
Set Result PDO::ATTR_DRIVER_NAME :
|
||||||
|
SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object.
|
||||||
|
Get Result PDO::ATTR_DRIVER_NAME :
|
||||||
|
string\(6\) "sqlsrv"
|
||||||
|
|
||||||
|
Test_4:
|
||||||
|
Set Result PDO::ATTR_STRINGIFY_FETCHES :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_STRINGIFY_FETCHES :
|
||||||
|
bool\(true\)
|
||||||
|
|
||||||
|
Test_5:
|
||||||
|
Set Result PDO::ATTR_CLIENT_VERSION :
|
||||||
|
SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object.
|
||||||
|
Get Result PDO::ATTR_CLIENT_VERSION :
|
||||||
|
array\(4\) {
|
||||||
|
\[\"(DriverDllName|DriverName)\"\]=>
|
||||||
|
string\(15\) \"msodbcsql[0-9]{2}\.dll|string\(24\) \"libmsodbcsql-[0-9]{2}\.[0-9]\.so\.[0-9]\.[0-9]\"
|
||||||
|
\["DriverODBCVer"\]=>
|
||||||
|
string\(5\) \"[0-9]{1,2}\.[0-9]{1,2}\"
|
||||||
|
\["DriverVer"\]=>
|
||||||
|
string\(10\) "[0-9]{2}.[0-9]{2}.[0-9]{4}"
|
||||||
|
\["ExtensionVer"\]=>
|
||||||
|
string\([0-9]*\) \"[0-9]\.[0-9]\.[0-9](\-((rc)|(preview))(\.[0-9]+)?)?(\+[0-9]+)?\"
|
||||||
|
}
|
||||||
|
|
||||||
|
Test_6:
|
||||||
|
Set Result PDO::ATTR_SERVER_INFO :
|
||||||
|
SQLSTATE\[IMSSP\]: A read-only attribute was designated on the PDO object.
|
||||||
|
Get Result PDO::ATTR_SERVER_INFO :
|
||||||
|
array\(3\) {
|
||||||
|
\["CurrentDatabase"\]=>
|
||||||
|
string\([0-9]*\) ".*"
|
||||||
|
\["SQLServerVersion"\]=>
|
||||||
|
string\(10\) "[0-9]{2}.[0-9]{2}.[0-9]{4}"
|
||||||
|
\["SQLServerName"\]=>
|
||||||
|
string\([0-9]*\) ".*"
|
||||||
|
}
|
||||||
|
|
||||||
|
Test_7:
|
||||||
|
Set Result PDO::ATTR_CASE :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_CASE :
|
||||||
|
int\(2\)
|
||||||
|
|
||||||
|
Test_8:
|
||||||
|
Set Result PDO::SQLSRV_ATTR_ENCODING :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::SQLSRV_ATTR_ENCODING :
|
||||||
|
int\(3\)
|
||||||
|
|
||||||
|
Test_9:
|
||||||
|
Set Result PDO::ATTR_DEFAULT_FETCH_MODE :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_DEFAULT_FETCH_MODE :
|
||||||
|
int\(2\)
|
||||||
|
|
||||||
|
Test_10:
|
||||||
|
Set Result PDO::ATTR_ORACLE_NULLS :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_ORACLE_NULLS :
|
||||||
|
int\(0\)
|
||||||
|
|
||||||
|
Test_11:
|
||||||
|
Set Result PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::SQLSRV_ATTR_CLIENT_BUFFER_MAX_KB_SIZE :
|
||||||
|
int\(5120\)
|
||||||
|
|
||||||
|
Test_12:
|
||||||
|
Set Result PDO::SQLSRV_ATTR_DIRECT_QUERY :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::SQLSRV_ATTR_DIRECT_QUERY :
|
||||||
|
bool\(true\)
|
||||||
|
|
||||||
|
Test_13:
|
||||||
|
Set Result PDO::ATTR_STATEMENT_CLASS :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::ATTR_STATEMENT_CLASS :
|
||||||
|
array\(2\) {
|
||||||
|
\[0\]=>
|
||||||
|
string\(18\) "CustomPDOStatement"
|
||||||
|
\[1\]=>
|
||||||
|
array\(0\) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Test_14:
|
||||||
|
Set Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::SQLSRV_ATTR_QUERY_TIMEOUT :
|
||||||
|
int\(10\)
|
||||||
|
|
||||||
|
Test_15:
|
||||||
|
Set Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE :
|
||||||
|
bool\(true\)
|
||||||
|
Get Result PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE :
|
||||||
|
bool\(false\)
|
35
test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt
Normal file
35
test/pdo_sqlsrv/pdo_invalid_conn_opt.phpt
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::__Construct with invalid connection option
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName;" .
|
||||||
|
"Database = $database;" .
|
||||||
|
"InvalidKey = true;"
|
||||||
|
;
|
||||||
|
$conn = new PDO( $dsn, $username, $password);
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "IMSSP"
|
||||||
|
[1]=>
|
||||||
|
int(-42)
|
||||||
|
[2]=>
|
||||||
|
string(64) "An invalid keyword 'InvalidKey' was specified in the DSN string."
|
||||||
|
}
|
52
test/pdo_sqlsrv/pdo_lastInsertId.phpt
Normal file
52
test/pdo_sqlsrv/pdo_lastInsertId.phpt
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
--TEST--
|
||||||
|
Test the PDO::lastInsertId() method.
|
||||||
|
--SKIPIF--
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$conn = new PDO("sqlsrv:Server=$serverName;Database=$database", $username, $password);
|
||||||
|
|
||||||
|
$conn->exec("IF OBJECT_ID('tmp_table1', 'U') IS NOT NULL DROP TABLE [tmp_table1]");
|
||||||
|
$conn->exec("IF OBJECT_ID('tmp_table2', 'U') IS NOT NULL DROP TABLE [tmp_table2]");
|
||||||
|
$conn->exec("IF OBJECT_ID('tmp_table3', 'U') IS NOT NULL DROP TABLE [tmp_table3]");
|
||||||
|
$conn->exec('CREATE TABLE tmp_table1(id INT IDENTITY(100,2), val INT)');
|
||||||
|
$conn->exec('CREATE TABLE tmp_table2(id INT IDENTITY(200,2), val INT)');
|
||||||
|
$conn->exec('CREATE TABLE tmp_table3(id INT, val INT)');
|
||||||
|
|
||||||
|
$conn->exec('INSERT INTO tmp_table1 VALUES(1)');
|
||||||
|
$conn->exec('INSERT INTO tmp_table2 VALUES(2)');
|
||||||
|
$id = $conn->lastInsertId();
|
||||||
|
var_dump($id);
|
||||||
|
|
||||||
|
$conn->exec('INSERT INTO tmp_table2 VALUES(3)');
|
||||||
|
$conn->exec('INSERT INTO tmp_table1 VALUES(4)');
|
||||||
|
$id = $conn->lastInsertId();
|
||||||
|
var_dump($id);
|
||||||
|
|
||||||
|
// Should return empty string as the table does not have an IDENTITY column.
|
||||||
|
$conn->exec('INSERT INTO tmp_table3 VALUES(1,1)');
|
||||||
|
$id = $conn->lastInsertId();
|
||||||
|
var_dump($id);
|
||||||
|
|
||||||
|
// clean up
|
||||||
|
$conn->exec('DROP TABLE tmp_table1');
|
||||||
|
$conn->exec('DROP TABLE tmp_table2');
|
||||||
|
$conn->exec('DROP TABLE tmp_table3');
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
string(3) "200"
|
||||||
|
string(3) "102"
|
||||||
|
string(0) ""
|
34
test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt
Normal file
34
test/pdo_sqlsrv/pdo_prepare_invalid_cursor.phpt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::prepare by passing in invalid cursor value
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$conn = new PDO( "sqlsrv:Server = $serverName; Database = $database", $username, $password);
|
||||||
|
|
||||||
|
// PDO::CURSOR_FWDONLY should not be quoted
|
||||||
|
$stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => "PDO::CURSOR_FWDONLY" ));
|
||||||
|
print_r(($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// 10 is an invalid value for PDO::ATTR_CURSOR
|
||||||
|
$stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => 10 ));
|
||||||
|
print_r(($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
An invalid cursor type was specified for either PDO::ATTR_CURSOR or PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE
|
||||||
|
An invalid cursor type was specified for either PDO::ATTR_CURSOR or PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE
|
33
test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt
Normal file
33
test/pdo_sqlsrv/pdo_prepare_invalid_encoding.phpt
Normal file
|
@ -0,0 +1,33 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::prepare by passing in invalid encoding values
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$conn = new PDO( "sqlsrv:Server = $serverName; Database = $database", $username, $password);
|
||||||
|
|
||||||
|
// PDO::SQLSRV_ENCODING_SYSTEM should not be quoted
|
||||||
|
$stmt1 = $conn->prepare( "SELECT 1", array( PDO::SQLSRV_ATTR_ENCODING => "PDO::SQLSRV_ENCODING_SYSTEM" ));
|
||||||
|
print_r(($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// 10 is an invalid value for PDO::SQLSRV_ATTR_ENCODING
|
||||||
|
$stmt2 = $conn->prepare( "SELECT 2", array( PDO::SQLSRV_ATTR_ENCODING => 10 ));
|
||||||
|
print_r(($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
An invalid encoding was specified for SQLSRV_ATTR_ENCODING.
|
||||||
|
An invalid encoding was specified for SQLSRV_ATTR_ENCODING.
|
36
test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt
Normal file
36
test/pdo_sqlsrv/pdo_prepare_invalid_option_key.phpt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::prepare by passing in a string key
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
$attr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
|
||||||
|
$conn = new PDO( $dsn, $username, $password, $attr);
|
||||||
|
|
||||||
|
$stmt = $conn->prepare( "SELECT 1", array( "PDO::ATTR_CURSOR" => PDO::CURSOR_FWDONLY ));
|
||||||
|
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
array(3) {
|
||||||
|
[0]=>
|
||||||
|
string(5) "IMSSP"
|
||||||
|
[1]=>
|
||||||
|
int(-43)
|
||||||
|
[2]=>
|
||||||
|
string(42) "An invalid statement option was specified."
|
||||||
|
}
|
36
test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt
Normal file
36
test/pdo_sqlsrv/pdo_prepare_invalid_scrollable_cursor.phpt
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::prepare by passing in invalid scrollable type value
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$database = "tempdb";
|
||||||
|
$conn = new PDO( "sqlsrv:Server = $serverName; Database = $database", $username, $password);
|
||||||
|
//$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
|
||||||
|
|
||||||
|
// PDO::SQLSRV_CURSOR_BUFFERED should not be quoted
|
||||||
|
$stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => "PDO::SQLSRV_CURSOR_BUFFERED" ));
|
||||||
|
|
||||||
|
// if ATTR_CURSOR is FWDONLY, cannot set SCROLL_TYPE
|
||||||
|
$stmt2 = $conn->prepare( "SELECT 2", array( PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE => PDO::SQLSRV_CURSOR_BUFFERED ));
|
||||||
|
|
||||||
|
if ( $stmt1 || $stmt2 )
|
||||||
|
{
|
||||||
|
echo "Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE should return false.\n";
|
||||||
|
} else {
|
||||||
|
echo "Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE return false.\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE return false.
|
41
test/pdo_sqlsrv/pdo_prepare_options.phpt
Normal file
41
test/pdo_sqlsrv/pdo_prepare_options.phpt
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
--TEST--
|
||||||
|
Test PDO::prepare by passing in attributes
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
|
||||||
|
class CustomPDOStatement extends PDOStatement
|
||||||
|
{
|
||||||
|
protected function __construct() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
$prep_attr = array(PDO::SQLSRV_ATTR_ENCODING => PDO::SQLSRV_ENCODING_UTF8,
|
||||||
|
PDO::ATTR_STATEMENT_CLASS => array('CustomPDOStatement', array()),
|
||||||
|
PDO::SQLSRV_ATTR_DIRECT_QUERY => true,
|
||||||
|
PDO::ATTR_EMULATE_PREPARES => false,
|
||||||
|
PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE => true
|
||||||
|
);
|
||||||
|
$conn = new PDO( $dsn, $username, $password);
|
||||||
|
|
||||||
|
$stmt = $conn->prepare( "SELECT 1", $prep_attr );
|
||||||
|
|
||||||
|
echo "Test Successful";
|
||||||
|
}
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
Test Successful
|
34
test/pdo_sqlsrv/pdo_set_attr_invalid.phpt
Normal file
34
test/pdo_sqlsrv/pdo_set_attr_invalid.phpt
Normal file
|
@ -0,0 +1,34 @@
|
||||||
|
--TEST--
|
||||||
|
Test setting invalid value or key in connection attributes
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
|
||||||
|
$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
|
||||||
|
|
||||||
|
// Negative value for query timeout: should raise error
|
||||||
|
@$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, -1 );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// PDO::ATTR_CURSOR is a Statement Level Attribute only
|
||||||
|
@$conn->setAttribute( PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
}
|
||||||
|
catch ( PDOException $e ){
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
Invalid value -1 specified for option PDO::SQLSRV_ATTR_QUERY_TIMEOUT.
|
||||||
|
The given attribute is only supported on the PDOStatement object.
|
40
test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt
Normal file
40
test/pdo_sqlsrv/pdo_set_attr_invalid_encoding.phpt
Normal file
|
@ -0,0 +1,40 @@
|
||||||
|
--TEST--
|
||||||
|
Test setting invalid encoding attributes
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try{
|
||||||
|
$database = "tempdb";
|
||||||
|
$dsn = "sqlsrv:Server = $serverName; Database = $database";
|
||||||
|
|
||||||
|
$conn = new PDO( $dsn, $username, $password, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
|
||||||
|
|
||||||
|
// valid option: should have no error
|
||||||
|
@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_DEFAULT );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// PDO::SQLSRV_ENCODING_UTF8 should not be quoted
|
||||||
|
@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, "PDO::SQLSRV_ENCODING_UTF8" );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
|
||||||
|
// PDO::SQLSRV_ENCODING_BINARY is not supported
|
||||||
|
@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY );
|
||||||
|
print_r (($conn->errorInfo())[2]);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
catch ( PDOException $e ){
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECT--
|
||||||
|
|
||||||
|
An invalid encoding was specified for SQLSRV_ATTR_ENCODING.
|
||||||
|
An invalid encoding was specified for SQLSRV_ATTR_ENCODING.
|
51
test/pdo_sqlsrv/pdo_transaction.phpt
Normal file
51
test/pdo_sqlsrv/pdo_transaction.phpt
Normal file
|
@ -0,0 +1,51 @@
|
||||||
|
--TEST--
|
||||||
|
starts a transaction, delete rows and rollback the transaction; starts a transaction, delete rows and commit
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
$conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb", $username, $password);
|
||||||
|
|
||||||
|
$conn->exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1");
|
||||||
|
$conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1))");
|
||||||
|
|
||||||
|
$ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'b')");
|
||||||
|
$ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'c')");
|
||||||
|
|
||||||
|
//revert the inserts but roll back
|
||||||
|
$conn->beginTransaction();
|
||||||
|
$rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'");
|
||||||
|
$conn->rollback();
|
||||||
|
$stmt = $conn->query("SELECT * FROM Table1");
|
||||||
|
|
||||||
|
// Table1 should still have 2 rows since delete was rolled back
|
||||||
|
if ( count( $stmt->fetchAll() ) == 2 )
|
||||||
|
echo "Transaction rolled back successfully\n";
|
||||||
|
else
|
||||||
|
echo "Transaction failed to roll back\n";
|
||||||
|
|
||||||
|
//revert the inserts then commit
|
||||||
|
$conn->beginTransaction();
|
||||||
|
$rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'");
|
||||||
|
$conn->commit();
|
||||||
|
echo $rows." rows affected\n";
|
||||||
|
|
||||||
|
$stmt = $conn->query("SELECT * FROM Table1");
|
||||||
|
if ( count( $stmt->fetchAll() ) == 0 )
|
||||||
|
echo "Transaction committed successfully\n";
|
||||||
|
else
|
||||||
|
echo "Transaction failed to commit\n";
|
||||||
|
|
||||||
|
//drop the created temp table
|
||||||
|
$conn->exec("DROP TABLE Table1");
|
||||||
|
|
||||||
|
//free statement and connection
|
||||||
|
$stmt = NULL;
|
||||||
|
$conn = NULL;
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
Transaction rolled back successfully
|
||||||
|
2 rows affected
|
||||||
|
Transaction committed successfully
|
38
test/pdo_sqlsrv/pdo_warnings.phpt
Normal file
38
test/pdo_sqlsrv/pdo_warnings.phpt
Normal file
|
@ -0,0 +1,38 @@
|
||||||
|
--TEST--
|
||||||
|
Test warnings on connection and statement levels
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
try{
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
$conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password);
|
||||||
|
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING );
|
||||||
|
|
||||||
|
// raise a warning in connection
|
||||||
|
$conn->getAttribute( PDO::ATTR_TIMEOUT );
|
||||||
|
|
||||||
|
$conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1");
|
||||||
|
|
||||||
|
// raise a warning in statement
|
||||||
|
$statement = $conn->prepare("CRATE TABLE table1(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) ");
|
||||||
|
$statement->execute();
|
||||||
|
|
||||||
|
$statement = NULL;
|
||||||
|
$conn = NULL;
|
||||||
|
}
|
||||||
|
catch ( PDOException $e ){
|
||||||
|
var_dump( $e->errorInfo );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
--EXPECTREGEX--
|
||||||
|
Warning: SQLSTATE: IMSSP
|
||||||
|
Error Code: -38
|
||||||
|
Error Message: An unsupported attribute was designated on the PDO object\.
|
||||||
|
in .+(\/|\\)pdo_warnings\.php on line [0-9]+
|
||||||
|
|
||||||
|
Warning: PDO::getAttribute\(\): SQLSTATE\[IM001\]: Driver does not support this function: driver does not support that attribute in .+(\/|\\)pdo_warnings\.php on line [0-9]+
|
||||||
|
|
||||||
|
Warning: PDOStatement::execute\(\): SQLSTATE\[42000\]: Syntax error or access violation: 156 \[Microsoft\]\[ODBC Driver [0-9]+ for SQL Server\]\[SQL Server\]Incorrect syntax near the keyword 'TABLE'\. in .+(\/|\\)pdo_warnings\.php on line [0-9]+
|
47
test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt
Normal file
47
test/pdo_sqlsrv/pdostatement_bindcolumn_odd_types.phpt
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
--TEST--
|
||||||
|
Test the bindColumn method using PDO::PARAM_NULL and PDO::PARAM_STMT
|
||||||
|
--SKIPIF--
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password);
|
||||||
|
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
|
||||||
|
$conn->exec("IF OBJECT_ID('table1', 'U') IS NOT NULL DROP TABLE table1");
|
||||||
|
$conn->exec("CREATE TABLE table1(IntCol INT, CharCol NVARCHAR(20)) ");
|
||||||
|
$conn->exec("INSERT INTO table1 (IntCol, CharCol) VALUES (10, 'ten')");
|
||||||
|
|
||||||
|
$stmt = $conn->prepare("SELECT IntCol FROM table1");
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
// PARAM_NULL returns null
|
||||||
|
$stmt->bindColumn('IntCol', $intCol, PDO::PARAM_NULL);
|
||||||
|
$row = $stmt->fetch(PDO::FETCH_BOUND);
|
||||||
|
if ($intCol == NULL) {
|
||||||
|
echo "intCol is NULL\n";
|
||||||
|
} else {
|
||||||
|
echo "intCol should have been NULL\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
$stmt = $conn->prepare("SELECT CharCol FROM table1");
|
||||||
|
$stmt->execute();
|
||||||
|
|
||||||
|
// PARAM_STMT is not supported and should throw an exception
|
||||||
|
$stmt->bindColumn('CharCol', $charCol, PDO::PARAM_STMT);
|
||||||
|
$row = $stmt->fetch(PDO::FETCH_BOUND);
|
||||||
|
echo "PARAM_STMT should have thrown an exception\n";
|
||||||
|
|
||||||
|
}
|
||||||
|
catch (PDOException $e)
|
||||||
|
{
|
||||||
|
print_r($e->errorInfo[2]);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
--EXPECT--
|
||||||
|
intCol is NULL
|
||||||
|
PDO::PARAM_STMT is not a supported parameter type.
|
184
test/pdo_sqlsrv/pdostatement_get_set_attr.phpt
Normal file
184
test/pdo_sqlsrv/pdostatement_get_set_attr.phpt
Normal file
|
@ -0,0 +1,184 @@
|
||||||
|
--TEST--
|
||||||
|
Test setting and getting various statement attributes.
|
||||||
|
--SKIPIF--
|
||||||
|
|
||||||
|
--FILE--
|
||||||
|
<?php
|
||||||
|
|
||||||
|
require_once("autonomous_setup.php");
|
||||||
|
|
||||||
|
function set_stmt_option($conn, $arr)
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
|
||||||
|
$stmt = $conn->prepare( "Select * from temptb", $arr );
|
||||||
|
return $stmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n\n";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function set_stmt_attr($conn, $attr, $val)
|
||||||
|
{
|
||||||
|
$stmt = NULL;
|
||||||
|
try
|
||||||
|
{
|
||||||
|
echo "Set Attribute: " . $attr . "\n";
|
||||||
|
$stmt = $conn->prepare( "Select * from temptb");
|
||||||
|
}
|
||||||
|
catch( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n\n";
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
$res = $stmt->setAttribute(constant($attr), $val);
|
||||||
|
var_dump($res);
|
||||||
|
echo "\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n\n";
|
||||||
|
}
|
||||||
|
return $stmt;
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_stmt_attr($stmt, $attr)
|
||||||
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
|
echo "Get Attribute: " . $attr. "\n";
|
||||||
|
$res = $stmt->getAttribute(constant($attr));
|
||||||
|
var_dump($res);
|
||||||
|
echo "\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e)
|
||||||
|
{
|
||||||
|
echo $e->getMessage() . "\n\n";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// valid
|
||||||
|
function Test1($conn)
|
||||||
|
{
|
||||||
|
echo "Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT \n";
|
||||||
|
set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY, PDO::SQLSRV_ATTR_QUERY_TIMEOUT => 44));
|
||||||
|
echo "Test Successful\n\n";
|
||||||
|
}
|
||||||
|
|
||||||
|
// invalid
|
||||||
|
function Test2($conn)
|
||||||
|
{
|
||||||
|
echo "Test2 - Set stmt option: 'QueryTimeout' \n";
|
||||||
|
set_stmt_option($conn, array("QueryTimeout" => 44 ));
|
||||||
|
}
|
||||||
|
|
||||||
|
// valid attributes
|
||||||
|
function Test3($conn)
|
||||||
|
{
|
||||||
|
echo "Test3 \n";
|
||||||
|
$attr = "PDO::ATTR_CURSOR";
|
||||||
|
$stmt = set_stmt_attr($conn, $attr, 1);
|
||||||
|
if($stmt)
|
||||||
|
get_stmt_attr($stmt, $attr);
|
||||||
|
else
|
||||||
|
echo "Test3: stmt was null";
|
||||||
|
}
|
||||||
|
|
||||||
|
// not supported attribute
|
||||||
|
function Test4($conn)
|
||||||
|
{
|
||||||
|
echo "Test4 \n";
|
||||||
|
$attr = "PDO::ATTR_SERVER_VERSION";
|
||||||
|
$stmt = set_stmt_attr($conn, $attr, "whatever");
|
||||||
|
get_stmt_attr($stmt, $attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// not supported attribute value
|
||||||
|
function Test5($conn)
|
||||||
|
{
|
||||||
|
echo "Test5 \n";
|
||||||
|
$attr = "PDO::ATTR_CURSOR";
|
||||||
|
$stmt = set_stmt_attr($conn, $attr, 3);
|
||||||
|
get_stmt_attr($stmt, $attr);
|
||||||
|
}
|
||||||
|
|
||||||
|
// valid GET/SET attribute and set option
|
||||||
|
function Test6($conn)
|
||||||
|
{
|
||||||
|
echo "Test6 - Set stmt option: SQLSRV_ATTR_ENCODING \n";
|
||||||
|
set_stmt_option($conn, array(PDO::SQLSRV_ATTR_ENCODING => 3));
|
||||||
|
|
||||||
|
$attr = "PDO::SQLSRV_ATTR_QUERY_TIMEOUT";
|
||||||
|
$stmt = set_stmt_attr($conn, $attr, 45);
|
||||||
|
get_stmt_attr($stmt, $attr);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
try
|
||||||
|
{
|
||||||
|
$conn = new PDO( "sqlsrv:Server=$serverName; Database = tempdb ", $username, $password);
|
||||||
|
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
|
||||||
|
$conn->exec("IF OBJECT_ID('temptb', 'U') IS NOT NULL DROP TABLE temptb");
|
||||||
|
$conn->exec("CREATE TABLE temptb(id INT NOT NULL PRIMARY KEY, val VARCHAR(10)) ");
|
||||||
|
|
||||||
|
test1($conn);
|
||||||
|
test2($conn);
|
||||||
|
test3($conn);
|
||||||
|
test4($conn);
|
||||||
|
test5($conn);
|
||||||
|
test6($conn);
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
catch( PDOException $e ) {
|
||||||
|
|
||||||
|
var_dump( $e );
|
||||||
|
exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
||||||
|
|
||||||
|
--EXPECTREGEX--
|
||||||
|
Test1 - Set stmt option: SQLSRV_ATTR_ENCODING, ATTR_CURSOR, SQLSRV_ATTR_QUERY_TIMEOUT
|
||||||
|
Test Successful
|
||||||
|
|
||||||
|
Test2 - Set stmt option: 'QueryTimeout'
|
||||||
|
SQLSTATE\[IMSSP\]: An invalid statement option was specified.
|
||||||
|
|
||||||
|
Test3
|
||||||
|
Set Attribute: PDO::ATTR_CURSOR
|
||||||
|
SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare.
|
||||||
|
|
||||||
|
Get Attribute: PDO::ATTR_CURSOR
|
||||||
|
int\(0\)
|
||||||
|
|
||||||
|
Test4
|
||||||
|
Set Attribute: PDO::ATTR_SERVER_VERSION
|
||||||
|
(SQLSTATE\[IMSSP\]: An invalid attribute was designated on the PDOStatement object.)|(SQLSTATE\[IM001\]: Driver does not support this function: driver doesn't support getting that attribute)
|
||||||
|
|
||||||
|
Get Attribute: PDO::ATTR_SERVER_VERSION
|
||||||
|
SQLSTATE\[IMSSP\]: An invalid attribute was designated on the PDOStatement object.
|
||||||
|
|
||||||
|
Test5
|
||||||
|
Set Attribute: PDO::ATTR_CURSOR
|
||||||
|
SQLSTATE\[IMSSP\]: The PDO::ATTR_CURSOR and PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE attributes may only be set in the \$driver_options array of PDO::prepare.
|
||||||
|
|
||||||
|
Get Attribute: PDO::ATTR_CURSOR
|
||||||
|
int\(0\)
|
||||||
|
|
||||||
|
Test6 - Set stmt option: SQLSRV_ATTR_ENCODING
|
||||||
|
Set Attribute: PDO::SQLSRV_ATTR_QUERY_TIMEOUT
|
||||||
|
bool\(true\)
|
||||||
|
|
||||||
|
|
||||||
|
Get Attribute: PDO::SQLSRV_ATTR_QUERY_TIMEOUT
|
||||||
|
int\(45\)
|
Loading…
Reference in a new issue