refactor PDO tests with client buffer or table with all datatypes

This commit is contained in:
v-kaywon 2017-11-01 17:09:58 -07:00
parent bd001a5b1a
commit 50d3c19c47
53 changed files with 2218 additions and 2790 deletions

View file

@ -183,9 +183,10 @@ function getDefaultColName($dataType)
* @param array $inputs : an associative array column name and its value; value may be a literal value or a ColumnMeta object
* @param bool $disableCE : flag for disabling column encryption even when keystore is NOT none
* for creating table with datatypes not support for encryption
* @param string $tableOption : table options appended to the end of a create table statement
* @return int reporting the number of rows affected (should always be 0 for creating table)
*/
function createTable($conn, $tbname, $columnMetaArr, $disableCE = false)
function createTable($conn, $tbname, $columnMetaArr, $tableOption = '', $disableCE = false)
{
try {
dropTable($conn, $tbname);
@ -202,7 +203,7 @@ function createTable($conn, $tbname, $columnMetaArr, $disableCE = false)
}
}
$colDef = rtrim($colDef, ", ");
$createSql = "CREATE TABLE $tbname ($colDef)";
$createSql = "CREATE TABLE $tbname ($colDef) $tableOption";
$numRows = $conn->exec($createSql);
return $numRows;
} catch (PDOException $e) {
@ -234,7 +235,7 @@ class BindParamOp
if (in_array($pdoType, $pdoParams)) {
$this->pdoType = $pdoType;
} else {
prinft("BindParamOp construct: The pdoType provided must be one of PDO::PARAM_BOOL, PDO::PARAM_NULL, PDO::PARAM_INT, PDO::PARAM_STR, or PDO::PARAM_LOB.\n");
printf("BindParamOp construct: The pdoType provided must be one of PDO::PARAM_BOOL, PDO::PARAM_NULL, PDO::PARAM_INT, PDO::PARAM_STR, or PDO::PARAM_LOB.\n");
exit;
}
@ -1366,7 +1367,7 @@ function CreateTableEx($conn, $tableName, $dataType)
{
Trace("Creating table $tableName ...");
$tsql = "CREATE TABLE [$tableName] ($dataType)";
DropTable($conn, $tableName);
dropTable($conn, $tableName);
if (IsPdoMode()) {
$outcome = $conn->exec($tsql);

View file

@ -0,0 +1,227 @@
<?php
/*
Microsoft SQL Server Driver for PHP - Unit Test Framework
Copyright (c) Microsoft Corporation. All rights reserved.
Description:
Random data generator for INSERT statements.
*/
// globals
$int_col = array(1, 2);
$bin = fopen('php://memory', 'a');
fwrite($bin, '00');
rewind($bin);
$binary_col = array($bin, $bin);
$string_col = array("STRINGCOL1", "STRINGCOL2");
$decimal_col = array(111.111, 222.222);
$large_string = "This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.";
$date_col = array('2000-11-11', '2000-11-11');
$datetime_col = array('2000-11-11 11:11:11.111', '2000-11-11 11:11:11.222');
$datetime2_col = array('2000-11-11 11:11:11.111', '2000-11-11 11:11:11.222');
$dtoffset_col = array('2000-11-11 11:11:11.111 +00:00', '2000-11-11 11:11:11.222 +00:00');
$smalldt_col = array('2000-11-11 11:11:00', '2000-11-11 11:11:00');
$timeCol = array('11:11:11.111', '11:11:11.222');
$large_string_col = array(" 1 " . $large_string . "", " 2 " . $large_string . "");
$guid_col = array("AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA", "BBBBBBBB-BBBB-BBBB-BBBB-BBBBBBBBBBBB");
$xml_col = array("<xml> 1 " . $large_string . "</xml>", "<xml> 2 " . $large_string . "</xml>");
$null_col = 'null';
$mainTypesClass = 'PDO_MainTypesClass';
class PDO_MainTypesClass
{
public $IntCol;
public $CharCol;
public $NCharCol;
public $DateTimeCol;
public $VarcharCol;
public $NVarCharCol;
public $FloatCol;
public $XmlCol;
public function dumpAll()
{
var_dump($this->IntCol);
var_dump($this->CharCol);
var_dump($this->NCharCol);
var_dump($this->DateTimeCol);
var_dump($this->VarcharCol);
var_dump($this->NVarCharCol);
var_dump($this->FloatCol);
var_dump($this->XmlCol);
}
}
function createTableMainTypes($conn, $tbname)
{
try {
require_once("MsCommon_mid-refactor.inc");
if (isColEncrypted()) {
$xmlType = "nvarchar(max)";
} else {
$xmlType = "xml";
}
$columnMetaArr = array("IntCol" => "int",
"CharCol" => "char(10)",
"NCharCol" => "nchar(10)",
"DateTimeCol" => "datetime",
"VarcharCol" => "varchar(50)",
"NVarCharCol" => "nvarchar(50)",
"FloatCol" => "float",
"XmlCol" => $xmlType);
createTable($conn, $tbname, $columnMetaArr, "ON [PRIMARY]");
} catch (Exception $e) {
var_dump($e);
exit;
}
}
function insertIntoTableMainTypes($conn, $tbname, $rownum)
{
try {
require_once("MsCommon_mid-refactor.inc");
global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $datetime_col, $datetime2_col, $dtoffset_col, $smalldt_col, $timeCol;
$inputs = array("IntCol" => $int_col[$rownum],
"CharCol" => $string_col[$rownum],
"NCharCol" => $string_col[$rownum],
"DateTimeCol" => $datetime_col[$rownum],
"VarcharCol" => $string_col[$rownum],
"NVarCharCol" => $string_col[$rownum],
"FloatCol" => $decimal_col[$rownum],
"XmlCol" => $xml_col[$rownum]);
$stmt = insertRow($conn, $tbname, $inputs, "prepareBindParam");
} catch (Exception $e) {
var_dump($e);
exit;
}
}
function createAndInsertTableMainTypes($conn, $tbname, $rows = array(0, 1))
{
createTableMainTypes($conn, $tbname);
foreach ($rows as $rownum) {
insertIntoTableMainTypes($conn, $tbname, $rownum);
}
}
function createTableAllTypes($conn, $tbname)
{
try {
require_once("MsCommon_mid-refactor.inc");
if (isColEncrypted()) {
$moneyType = "decimal(19,4)";
$smallmoneyType = "decimal(10,4)";
$imageType = "varbinary(max)";
$ntextType = "nvarchar(max)";
$textType = "varchar(max)";
$xmlType = "nvarchar(max)";
} else {
$moneyType = "money";
$smallmoneyType = "smallmoney";
$imageType = "image";
$ntextType = "ntext";
$textType = "text";
$xmlType = "xml";
}
$columnMetaArr = array("BigIntCol" => "bigint",
"BinaryCol" => "binary(5)",
"BitCol" => "bit",
"CharCol" => "char(10)",
"DateCol" => "date",
"DateTimeCol" => "datetime",
"DateTime2Col" => "datetime2(7)",
"DTOffsetCol" => "datetimeoffset(7)",
"DecimalCol" => "decimal(18,0)",
"FloatCol" => "float",
"ImageCol" => $imageType,
"IntCol" => "int",
"MoneyCol" => $moneyType,
"NCharCol" => "nchar(10)",
"NTextCol" => $ntextType,
"NumCol" => "numeric(18,0)",
"NVarCharCol" => "nvarchar(50)",
"NVarCharMaxCol" => "nvarchar(max)",
"RealCol" => "real",
"SmallDTCol" => "smalldatetime",
"SmallIntCol" => "smallint",
"SmallMoneyCol" => $smallmoneyType,
"TextCol" => $textType,
"TimeCol" => "time(7)",
"TinyIntCol" => "tinyint",
"Guidcol" => "uniqueidentifier",
"VarbinaryCol" => "varbinary(50)",
"VarbinaryMaxCol" => "varbinary(max)",
"VarcharCol" => "varchar(50)",
"VarcharMaxCol" => "varchar(max)",
"XmlCol" => $xmlType);
createTable($conn, $tbname, $columnMetaArr, "ON [PRIMARY] TEXTIMAGE_ON [PRIMARY]");
} catch (Exception $e) {
var_dump($e);
exit;
}
}
function insertIntoTableAllTypes($conn, $tbname, $rownum)
{
try {
require_once("MsCommon_mid-refactor.inc");
global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $datetime_col, $datetime2_col, $dtoffset_col, $smalldt_col, $timeCol;
$inputs = array("BigIntCol" => $int_col[$rownum],
"BinaryCol" => new BindParamOp(2, $binary_col[$rownum], "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"BitCol" => 0,
"CharCol" => $string_col[$rownum],
"DateCol" => $date_col[$rownum],
"DateTimeCol" => $datetime_col[$rownum],
"DateTime2Col" => $datetime2_col[$rownum],
"DTOffsetCol" => $dtoffset_col[$rownum],
"DecimalCol" => $decimal_col[$rownum],
"FloatCol" => $decimal_col[$rownum],
"ImageCol" => new BindParamOp(11, $binary_col[$rownum], "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"IntCol" => $int_col[$rownum],
"MoneyCol" => $decimal_col[$rownum],
"NCharCol" => $string_col[$rownum],
"NTextCol" => $large_string_col[$rownum],
"NumCol" => $int_col[$rownum],
"NVarCharCol" => $string_col[$rownum],
"NVarCharMaxCol" => $large_string_col[$rownum],
"RealCol" => $decimal_col[$rownum],
"SmallDTCol" => $smalldt_col[$rownum],
"SmallIntCol" => $int_col[$rownum],
"SmallMoneyCol" => $decimal_col[$rownum],
"TextCol" => $large_string_col[$rownum],
"TimeCol" => $timeCol[$rownum],
"TinyIntCol" => $int_col[$rownum],
"Guidcol" => $guid_col[$rownum],
"VarbinaryCol" => new BindParamOp(27, $binary_col[$rownum], "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarbinaryMaxCol" => new BindParamOp(28, $binary_col[$rownum], "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarcharCol" => $string_col[$rownum],
"VarcharMaxCol" => $large_string_col[$rownum],
"XmlCol" => $xml_col[$rownum]);
$stmt = insertRow($conn, $tbname, $inputs, "prepareBindParam");
} catch (Exception $e) {
var_dump($e);
exit;
}
}
function createAndInsertTableAllTypes($conn, $tbname, $rows = array(0))
{
createTableAllTypes($conn, $tbname);
foreach ($rows as $rownum) {
insertIntoTableAllTypes($conn, $tbname, $rownum);
}
}

View file

@ -1,60 +1,23 @@
--TEST--
PDO Drivers Info Test
--DESCRIPTION--
Verifies the functionality of "PDO:getAvailableDrivers().
Verifies the functionality of "PDO:getAvailableDrivers()<EFBFBD>.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
function DriversInfo()
{
include 'MsSetup.inc';
$testName = "PDO - Drivers";
StartTest($testName);
try {
$drivers = PDO::getAvailableDrivers();
if (in_array("sqlsrv", $drivers))
{
$count = count($drivers);
for ($i = 0; $i < $count; $i++)
{
Trace("Driver #".($i + 1).": ".$drivers[$i]."\n");
}
}
else
{
if (!in_array("sqlsrv", $drivers)) {
printf("$PhpDriver is missing.\n");
} else {
printf("Done\n");
}
EndTest($testName);
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
DriversInfo();
}
catch (Exception $e)
{
} catch (Exception $e) {
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test "PDO - Drivers" completed successfully.
Done

View file

@ -5,57 +5,26 @@ Verifies the functionality of PDO with phpinfo().
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
function DriversInfo()
{
include 'MsSetup.inc';
$testName = "PDO - phpinfo";
StartTest($testName);
try {
ob_start();
phpinfo();
$info = ob_get_contents();
ob_end_clean();
// Check phpinfo() data
if (stristr($info, "PDO support => enabled") === false)
{
if (stristr($info, "PDO support => enabled") === false) {
printf("PDO is not enabled\n");
}
else if (stristr($info, "pdo_sqlsrv support => enabled") === false)
{
} elseif (stristr($info, "pdo_sqlsrv support => enabled") === false) {
printf("Cannot find PDO driver line in phpinfo() output\n");
} else {
printf("Done\n");
}
EndTest($testName);
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
DriversInfo();
}
catch (Exception $e)
{
} catch (Exception $e) {
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test "PDO - phpinfo" completed successfully.
Done

View file

@ -6,57 +6,32 @@ Verifies as well that invalid connection attempts fail as expected.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
function ConnectionTest()
{
include 'MsSetup.inc';
$testName = "PDO Connection";
StartTest($testName);
require_once("MsSetup.inc");
require_once("MsCommon_mid-refactor.inc");
try {
// Invalid connection attempt => errors are expected
Trace("Invalid connection attempt (to a non-existing server) ....\n");
$conn1 = PDOConnect('PDO', "InvalidServerName", $uid, $pwd, false);
if ($conn1)
{
$serverName="InvalidServerName";
$dsn = getDSN($serverName, $databaseName);
$conn1 = new PDO($dsn, $uid, $pwd, $connectionOptions);
if ($conn1) {
printf("Invalid connection attempt should have failed.\n");
}
$conn1 = null;
unset($conn1);
} catch (Exception $e) {
unset($conn1);
echo "Done\n";
}
try {
// Valid connection attempt => no errors are expected
Trace("\nValid connection attempt (to $server) ....\n");
$conn2 = Connect();
$conn2 = null;
EndTest($testName);
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
ConnectionTest();
}
catch (Exception $e)
{
$conn2 = connect();
unset($conn2);
} catch (Exception $e) {
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test "PDO Connection" completed successfully.
Done

View file

@ -5,76 +5,45 @@ Verification of PDO::errorCode()
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
function CheckErrorCode()
{
include 'MsSetup.inc';
$testName = "PDO Connection - Error Code";
StartTest($testName);
$conn1 = Connect();
CheckError(1, $conn1, '00000');
require_once("MsCommon_mid-refactor.inc");
try {
$conn1 = connect();
checkError(1, $conn1, '00000');
// Prepare test table
$table1 = $tableName."1";
$table2 = $tableName."2";
CreateTableEx($conn1, $table1, "id int NOT NULL PRIMARY KEY, label VARCHAR(10)", null);
$table1 = "Table1";
createTable($conn1, $table1, array(new ColumnMeta("int", "id", "NOT NULL PRIMARY KEY"), "label" => "varchar(10)"));
// Check errors when executing SELECT queries
$stmt1 = $conn1->prepare("SELECT id, label FROM [$table1]");
CheckError(2, $conn1);
CheckError(3, $stmt1);
checkError(2, $conn1);
checkError(3, $stmt1);
$stmt1->execute();
$stmt2 = &$stmt1;
CheckError(4, $stmt1);
checkError(4, $stmt1);
$stmt1->closeCursor();
DropTable($conn1, $table1);
CheckError(5, $conn1);
dropTable($conn1, $table1);
checkError(5, $conn1);
// Cleanup
$stmt1 = null;
$conn1 = null;
EndTest($testName);
unset($stmt);
unset($conn);
echo "Done\n";
} catch (Exception $e) {
echo $e->getMessage();
}
function CheckError($offset, &$obj, $expected = '00000')
function checkError($offset, &$obj, $expected = '00000')
{
$code = $obj->errorCode();
if (($code != $expected) && (($expected != '00000') || ($code !='')))
{
printf("[%03d] Expecting error code '%s' got code '%s'\n",
$offset, $expected, $code);
if (($code != $expected) && (($expected != '00000') || ($code !=''))) {
printf("[%03d] Expecting error code '%s' got code '%s'\n", $offset, $expected, $code);
}
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
CheckErrorCode();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test "PDO Connection - Error Code" completed successfully.
Done

View file

@ -5,112 +5,81 @@ Verification of PDO::errorInfo()
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
function CheckErrorInfo()
{
include 'MsSetup.inc';
$testName = "PDO Connection - Error Info";
StartTest($testName);
$conn1 = Connect();
CheckError(1, $conn1, '00000');
try {
$conn1 = connect("", array(), PDO::ERRMODE_SILENT);
checkError(1, $conn1, '00000');
// Prepare test table
$table1 = $tableName."1";
$table2 = $tableName."2";
CreateTableEx($conn1, $table1, "id int NOT NULL PRIMARY KEY, label VARCHAR(10)", null);
$table1 = "Table1";
$table2 = "Table2";
createTable($conn1, $table1, array(new ColumnMeta("int", "id", "NOT NULL PRIMARY KEY"), "label" => "varchar(10)"));
// Check errors when executing SELECT queries
$stmt1 = $conn1->prepare("SELECT id, label FROM [$table1]");
CheckError(2, $conn1);
CheckError(3, $stmt1);
checkError(2, $conn1);
checkError(3, $stmt1);
$stmt1->execute();
$stmt2 = &$stmt1;
CheckError(4, $stmt1);
checkError(4, $stmt1);
$stmt1->closeCursor();
//DropTable($conn1, $table1);
@$stmt1->execute();
CheckError(5, $conn1);
//CheckError(6, $stmt1, '42S02');
//CheckError(7, $stmt2, '42S02');
dropTable($conn1, $table1);
$stmt1->execute();
checkError(5, $conn1);
checkError(6, $stmt1, '42S02');
checkError(7, $stmt2, '42S02');
$stmt1->closeCursor();
DropTable($conn1, $table2);
dropTable($conn1, $table2);
$conn2 = &$conn1;
//@$conn1->query("SELECT id, label FROM [$table2]");
//CheckError(8, $conn1, '42S02');
//CheckError(9, $conn2, '42S02');
@$conn1->query("SELECT id, label FROM [$table2]");
checkError(8, $conn1, '42S02');
checkError(9, $conn2, '42S02');
createTable($conn1, $table1, array(new ColumnMeta("int", "id", "NOT NULL PRIMARY KEY"), "label" => "varchar(10)"));
CreateTableEx($conn1, $table1, "id int NOT NULL PRIMARY KEY, label VARCHAR(10)", null);
$stmt1 = $conn1->query("SELECT id, label FROM [$table1]");
CheckError(10, $conn1);
CheckError(11, $stmt1);
checkError(10, $conn1);
checkError(11, $stmt1);
$stmt1->closeCursor();
// @$conn1->query("SELECT id, label FROM [$table2]");
// CheckError(12, $conn1, '42S02');
// CheckError(13, $conn2, '42S02');
CheckError(14, $stmt1);
@$conn1->query("SELECT id, label FROM [$table2]");
checkError(12, $conn1, '42S02');
checkError(13, $conn2, '42S02');
checkError(14, $stmt1);
// Cleanup
DropTable($conn1, $table1);
$stmt1 = null;
$conn1 = null;
EndTest($testName);
dropTable($conn1, $table1);
unset($stmt1);
unset($conn1);
echo "Done\n";
} catch (Exception $e) {
echo $e->getMessage();
}
function CheckError($offset, &$obj, $expected = '00000')
function checkError($offset, &$obj, $expected = '00000')
{
$info = $obj->errorInfo();
$code = $info[0];
if (($code != $expected) && (($expected != '00000') || ($code != '')))
{
printf("[%03d] Expecting error code '%s' got code '%s'\n",
$offset, $expected, $code);
if (($code != $expected) && (($expected != '00000') || ($code != ''))) {
printf("[%03d] Expecting error code '%s' got code '%s'\n", $offset, $expected, $code);
}
if ($expected != '00000')
{
if (!isset($info[1]) || ($info[1] == ''))
{
if ($expected != '00000') {
if (!isset($info[1]) || ($info[1] == '')) {
printf("[%03d] Driver-specific error code not set\n", $offset);
}
if (!isset($info[2]) || ($info[2] == ''))
{
if (!isset($info[2]) || ($info[2] == '')) {
printf("[%03d] Driver-specific error message.not set\n", $offset);
}
}
}
//--------------------------------------------------------------------
// Repro
//
//--------------------------------------------------------------------
function Repro()
{
try
{
CheckErrorInfo();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
Repro();
?>
--EXPECT--
Test "PDO Connection - Error Info" completed successfully.
Done

View file

@ -12,40 +12,37 @@ $tableName2 = "test_connres2";
// Using generated tables will eventually allow us to put the
// connection resiliency tests on Github, since the integrated testing
// from AppVeyor does not have AdventureWorks.
function GenerateTables( $server, $uid, $pwd, $dbName, $tableName1, $tableName2 )
function generateTables($server, $uid, $pwd, $dbName, $tableName1, $tableName2)
{
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd );
if ( $conn === false )
{
die ( print_r( sqlsrv_errors() ) );
$conn = new PDO("sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd);
if ($conn === false) {
die(print_r(sqlsrv_errors()));
}
// Create table
$sql = "CREATE TABLE $tableName1 ( c1 INT, c2 VARCHAR(40) )";
$stmt = $conn->query( $sql );
$stmt = $conn->query($sql);
// Insert data
$sql = "INSERT INTO $tableName1 VALUES ( ?, ? )";
for( $t = 100; $t < 116; $t++ )
{
$stmt = $conn->prepare( $sql );
$ts = substr( sha1( $t ),0,5 );
for ($t = 100; $t < 116; $t++) {
$stmt = $conn->prepare($sql);
$ts = substr(sha1($t), 0, 5);
$params = array( $t,$ts );
$stmt->execute( $params );
$stmt->execute($params);
}
// Create table
$sql = "CREATE TABLE $tableName2 ( c1 INT, c2 VARCHAR(40) )";
$stmt = $conn->query( $sql );
$stmt = $conn->query($sql);
// Insert data
$sql = "INSERT INTO $tableName2 VALUES ( ?, ? )";
for( $t = 200; $t < 209; $t++ )
{
$stmt = $conn->prepare( $sql );
$ts = substr( sha1( $t ),0,5 );
for ($t = 200; $t < 209; $t++) {
$stmt = $conn->prepare($sql);
$ts = substr(sha1($t), 0, 5);
$params = array( $t,$ts );
$stmt->execute( $params );
$stmt->execute($params);
}
$conn = null;
@ -54,31 +51,29 @@ function GenerateTables( $server, $uid, $pwd, $dbName, $tableName1, $tableName2
// Break connection by getting the session ID and killing it.
// Note that breaking a connection and testing reconnection requires a
// TCP/IP protocol connection (as opposed to a Shared Memory protocol).
function BreakConnection( $conn, $conn_break )
function breakConnection($conn, $conn_break)
{
$stmt1 = $conn->query( "SELECT @@SPID" );
$obj = $stmt1->fetch( PDO::FETCH_NUM );
$stmt1 = $conn->query("SELECT @@SPID");
$obj = $stmt1->fetch(PDO::FETCH_NUM);
$spid = $obj[0];
$stmt2 = $conn_break->query( "KILL ".$spid );
$stmt2 = $conn_break->query("KILL ".$spid);
sleep(1);
}
// Remove any databases previously created by GenerateDatabase
function DropTables( $server, $uid, $pwd, $tableName1, $tableName2 )
function dropTables($server, $uid, $pwd, $tableName1, $tableName2)
{
global $dbName;
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd );
$conn = new PDO("sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd);
$query="IF OBJECT_ID('$tableName1', 'U') IS NOT NULL DROP TABLE $tableName1";
$stmt=$conn->query( $query );
$stmt=$conn->query($query);
$query="IF OBJECT_ID('$tableName2', 'U') IS NOT NULL DROP TABLE $tableName2";
$stmt=$conn->query( $query );
$stmt=$conn->query($query);
}
DropTables( $server, $uid, $pwd, $tableName1, $tableName2 );
GenerateTables( $server, $uid, $pwd, $dbName, $tableName1, $tableName2 );
?>
dropTables($server, $uid, $pwd, $tableName1, $tableName2);
generateTables($server, $uid, $pwd, $dbName, $tableName1, $tableName2);

View file

@ -1,7 +1,7 @@
--TEST--
Test the TNIR keyword with enabled and disabled options and the MultiSubnetFailover keyword with true and false options
--SKIPIF--
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
// The way SYN packets are sent from the host is different depending on the combination of the TNIR and MultiSubnetFailover values
@ -12,23 +12,20 @@ Test the TNIR keyword with enabled and disabled options and the MultiSubnetFailo
// TNIR is enabled by default
// MultiSubnetFailover is disabled by default
require_once("MsSetup.inc");
$GLOBALS['uid'] = $uid;
$GLOBALS['pwd'] = $pwd;
$GLOBALS['server'] = $server;
require_once("MsCommon_mid-refactor.inc");
function test_tnir( $TNIRValue, $MSFValue ) {
function test_tnir($TNIRValue, $MSFValue)
{
$MSFValueStr = ($MSFValue) ? 'true' : 'false';
$connectionString = "sqlsrv:Server=$GLOBALS[server]; TransparentNetworkIPResolution=$TNIRValue; MultiSubnetFailover=$MSFValueStr";
try {
$start = microtime(true);
$conn = new PDO($connectionString, $GLOBALS['uid'], $GLOBALS['pwd'], array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
$conn = connect("TransparentNetworkIPResolution=$TNIRValue; MultiSubnetFailover=$MSFValueStr;");
echo "Connection successful with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n";
$connect_time = round(microtime(true) - $start, 2);
echo "Time to connect is $connect_time sec.\n\n";
$conn = NULL;
}
catch(PDOException $e) {
unset($conn);
} catch (PDOException $e) {
echo "Connection failed with TNIR $TNIRValue and MultiSubnetFailover $MSFValueStr.\n";
print_r($e->errorInfo);
}

View file

@ -14,6 +14,7 @@ createTable($conn, $tbname, array("c1_bigint" => "bigint"));
// Create a Stored Procedure
$spname = "selectBigint";
dropProc($conn, $spname);
$spSql = "CREATE PROCEDURE $spname (@c1_bigint bigint OUTPUT) AS
SELECT @c1_bigint = c1_bigint FROM $tbname";
$conn->query($spSql);

View file

@ -14,6 +14,7 @@ createTable($conn, $tbname, array("c1_bool" => "int"));
// Create a Stored Procedure
$spname = "selectBool";
dropProc($conn, $spname);
$spSql = "CREATE PROCEDURE $spname (@c1_bool int OUTPUT) AS
SELECT @c1_bool = c1_bool FROM $tbname";
$conn->query($spSql);

View file

@ -17,9 +17,10 @@ non-MARS connection. This should fail too.
// when exiting the helper method? Do the associated cursors remain active? It is an
// unnecessary complication, so I have left the code like this.
require_once( "break_pdo.php" );
require_once("break_pdo.php");
require_once("MsCommon_mid-refactor.inc");
$conn_break = new PDO( "sqlsrv:server = $server ; Database = $dbName ;", $uid, $pwd );
$conn_break = connect();
///////////////////////////////////////////////////////////////////////////////
// Part 1
@ -29,52 +30,43 @@ $conn_break = new PDO( "sqlsrv:server = $server ; Database = $dbName ;", $uid, $
$connectionInfo = "ConnectRetryCount = 10; ConnectRetryInterval = 10;";
try
{
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
try {
$conn = connect($connectionInfo, array(), PDO::ERRMODE_EXCEPTION, true);
} catch (PDOException $e) {
echo "Could not connect.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$query1 = "SELECT * FROM $tableName1";
try
{
$stmt1 = $conn->prepare( $query1, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ) );
if ( $stmt1->execute() ) echo "Statement 1 successful.\n";
try {
$stmt1 = $conn->prepare($query1, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ));
if ($stmt1->execute()) {
echo "Statement 1 successful.\n";
}
$rowcount = $stmt1->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 1.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
BreakConnection( $conn, $conn_break );
breakConnection($conn, $conn_break);
$query2 = "SELECT * FROM $tableName2";
try
{
$stmt2 = $conn->prepare( $query2, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ) );
if ( $stmt2->execute() ) echo "Statement 2 successful.\n";
try {
$stmt2 = $conn->prepare($query2, array( PDO::ATTR_CURSOR=> PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=> PDO::SQLSRV_CURSOR_BUFFERED ));
if ($stmt2->execute()) {
echo "Statement 2 successful.\n";
}
$rowcount = $stmt2->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 2.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$conn = null;
unset($conn);
///////////////////////////////////////////////////////////////////////////////
// Part 2
@ -82,54 +74,48 @@ $conn = null;
// freed before breaking connection
///////////////////////////////////////////////////////////////////////////////
try
{
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
try {
$conn = connect($connectionInfo, array(), PDO::ERRMODE_EXCEPTION, true);
} catch (PDOException $e) {
echo "Could not connect.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$query1 = "SELECT * FROM $tableName1";
try
{
$stmt3 = $conn->query( $query1 );
if ( $stmt3 ) echo "Statement 3 successful.\n";
try {
$stmt3 = $conn->query($query1);
if ($stmt3) {
echo "Statement 3 successful.\n";
}
$rowcount = $stmt3->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 3.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$stmt3 = null;
unset($stmt3);
BreakConnection( $conn, $conn_break );
breakConnection($conn, $conn_break);
$query2 = "SELECT * FROM $tableName2";
try
{
$stmt4 = $conn->query( $query2 );
if ( $stmt4 ) echo "Statement 4 successful.\n";
try {
$stmt4 = $conn->query($query2);
if ($stmt4) {
echo "Statement 4 successful.\n";
}
$rowcount = $stmt4->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 4.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$conn = null;
unset($conn);
///////////////////////////////////////////////////////////////////////////////
// Part 3
@ -137,52 +123,46 @@ $conn = null;
// query is still active when connection is broken
///////////////////////////////////////////////////////////////////////////////
try
{
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
try {
$conn = connect($connectionInfo, array(), PDO::ERRMODE_EXCEPTION, true);
} catch (PDOException $e) {
echo "Could not connect.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$query1 = "SELECT * FROM $tableName1";
try
{
$stmt5 = $conn->query( $query1 );
if ( $stmt5 ) echo "Statement 5 successful.\n";
try {
$stmt5 = $conn->query($query1);
if ($stmt5) {
echo "Statement 5 successful.\n";
}
$rowcount = $stmt5->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 5.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
BreakConnection( $conn, $conn_break );
breakConnection($conn, $conn_break);
$query2 = "SELECT * FROM $tableName2";
try
{
$stmt6 = $conn->query( $query2 );
if ( $stmt6 ) echo "Statement 6 successful.\n";
try {
$stmt6 = $conn->query($query2);
if ($stmt6) {
echo "Statement 6 successful.\n";
}
$rowcount = $stmt6->rowCount();
echo $rowcount." rows in result set.\n";
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Error executing statement 6.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$conn = null;
unset($conn);
///////////////////////////////////////////////////////////////////////////////
// Part 4
@ -192,43 +172,37 @@ $conn = null;
$connectionInfo = "ConnectRetryCount = 10; ConnectRetryInterval = 10; MultipleActiveResultSets = false;";
try
{
$conn = new PDO( "sqlsrv:server = $server ; Database = $dbName ; $connectionInfo", $uid, $pwd );
$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
}
catch( PDOException $e )
{
try {
$conn = connect($connectionInfo, array(), PDO::ERRMODE_EXCEPTION, true);
} catch (PDOException $e) {
echo "Could not connect.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
BreakConnection( $conn, $conn_break );
breakConnection($conn, $conn_break);
try
{
$stmt7 = $conn->query( "SELECT * FROM $tableName1" );
if ( $stmt7 ) echo "Statement 7 successful.\n";
}
catch( PDOException $e )
{
try {
$stmt7 = $conn->query("SELECT * FROM $tableName1");
if ($stmt7) {
echo "Statement 7 successful.\n";
}
} catch (PDOException $e) {
echo "Error executing statement 7.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
try
{
$stmt8 = $conn->query( "SELECT * FROM $tableName2" );
if ( $stmt8 ) echo "Statement 8 successful.\n";
}
catch( PDOException $e )
{
try {
$stmt8 = $conn->query("SELECT * FROM $tableName2");
if ($stmt8) {
echo "Statement 8 successful.\n";
}
} catch (PDOException $e) {
echo "Error executing statement 8.\n";
print_r( $e->getMessage() );
print_r($e->getMessage());
}
$conn = null;
$conn_break = null;
unset($conn);
unset($conn_break);
?>
--EXPECTREGEX--

View file

@ -1,27 +1,26 @@
--TEST--
Test the PDO::errorCode() and PDO::errorInfo() methods.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
try
{
try {
$db = connect();
$tbname = "PDO_MainTypes";
createTableMainTypes($db, $tbname);
// query with a wrong column name.
$db->query( "Select * from " . $table1 . " where IntColX = 1" );
}
$db->query("Select * from " . $tbname . " where IntColX = 1");
catch( PDOException $e ) {
dropTable($db, $tbname);
unset($conn);
} catch (PDOException $e) {
print($db->errorCode());
echo "\n";
print_r($db->errorInfo());
exit;
}
?>
--EXPECTREGEX--
42S22

View file

@ -1,50 +1,59 @@
--TEST--
Test the different type of data for retrieving
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
try
{
try {
$db = connect();
$tbname = "PDO_AllTypes";
createTableAllTypes($db, $tbname);
$bin = fopen('php://memory', 'a');
fwrite($bin, '00');
rewind($bin);
$inputs = array("BigIntCol" => 0,
"BitCol" => '0',
"IntCol" => 1,
"SmallIntCol" => 1,
"TinyIntCol" => 1,
"DecimalCol" => 111,
"NumCol" => 1,
"MoneyCol" => 111.1110,
"SmallMoneyCol" => 111.1110,
"FloatCol" => 111.111,
"RealCol" => 111.111,
"CharCol" => 'STRINGCOL1',
"VarcharCol" => 'STRINGCOL1',
"TextCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"NCharCol" => 'STRINGCOL1',
"NVarcharCol" => 'STRINGCOL1',
"ImageCol" => new BindParamOp(17, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"BinaryCol" => new BindParamOp(18, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarbinaryCol" => new BindParamOp(19, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"SmallDTCol" => '2000-11-11 11:11:00',
"DateTimeCol" => '2000-11-11 11:11:11.110',
"DTOffsetCol" => '2000-11-11 11:11:11.1110000 +00:00',
"TimeCol" => '11:11:11.1110000',
"Guidcol" => 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA',
"VarbinaryMaxCol" => new BindParamOp(25, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarcharMaxCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"XmlCol" => '<xml> 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>',
"NTextCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"NVarCharMaxCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.');
$stmt = insertRow($db, $tbname, $inputs, "prepareBindParam");
$query = "INSERT INTO PDO_AllTypes (";
$query .= "BigIntCol,BitCol,IntCol,";
$query .= "SmallIntCol,TinyIntCol,";
$query .= "DecimalCol,NumCol,MoneyCol,";
$query .= "SmallMoneyCol,FloatCol,RealCol,";
$query .= "CharCol,VarcharCol,TextCol,";
$query .= "NCharCol,NVarcharCol,ImageCol,";
$query .= "BinaryCol,VarbinaryCol,SmallDTCol,";
$query .= "DateTimeCol,DTOffsetCol,";
$query .= "TimeCol,Guidcol,VarbinaryMaxCol,";
$query .= "VarcharMaxCol,XmlCol,NTextCol,";
$query .= "NVarCharMaxCol) VALUES (1,'0',1,1,1,111,1,";
$query .= "111.1110,111.1110,111.111,111.111,";
$query .= "'STRINGCOL1','STRINGCOL1',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'STRINGCOL1','STRINGCOL1','00',";
$query .= "CONVERT(BINARY(2),'0000000000',2),CONVERT(VARBINARY(2),CAST('00' AS VARCHAR(2)),2),'2000-11-11 11:11:00',";
$query .= "'2000-11-11 11:11:11.110',";
$query .= "'2000-11-11 11:11:11.1110000 +00:00','11:11:11.1110000',";
$query .= "'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA',CONVERT(VARBINARY(MAX),CAST('00' AS VARCHAR(MAX)),2) ,";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'<xml> 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.')";
$numRows = $db->exec($query);
echo "Insert complete!";
}
catch(PDOException $e)
{
dropTable($db, $tbname);
unset($stmt);
unset($conn);
echo "Insert complete!\n";
} catch (PDOException $e) {
var_dump($e);
}
?>
--EXPECT--
Insert complete!

View file

@ -3,23 +3,21 @@ Test the PDO::prepare() method.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require 'MsSetup.inc';
require_once 'MsCommon.inc';
try
{
try {
$db = connect();
$db->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
// Test_1 : Test with no parameters
echo "Test_1 : Test with no parameters :\n";
$stmt = $db->prepare('select * from ' . $table1);
if(!$stmt->execute())
{
$stmt = $db->prepare("select * from $tbname");
if (!$stmt->execute()) {
die("Test_1 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -27,9 +25,8 @@ try
// Test_2 : Test with indexed parameters
echo "Test_2 : Test with indexed parameters :\n";
$stmt = $db->prepare('select IntCol, CharCol from ' . $table1 . ' where IntCol = ? and CharCol = ?');
if(!$stmt->execute(array(1, 'STRINGCOL1')))
{
$stmt = $db->prepare("select IntCol, CharCol from $tbname where IntCol = ? and CharCol = ?");
if (!$stmt->execute(array(1, 'STRINGCOL1'))) {
die("Test_2 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -39,9 +36,8 @@ try
echo "Test_3 : Test with named parameters :\n";
$IntColVal = 2;
$CharColVal = 'STRINGCOL2';
$stmt = $db->prepare('select IntCol, CharCol from ' . $table1 . ' where IntCol = :IntColVal and CharCol = :CharColVal');
if(!$stmt->execute(array(':IntColVal' => $IntColVal, ':CharColVal' => $CharColVal)))
{
$stmt = $db->prepare("select IntCol, CharCol from $tbname where IntCol = :IntColVal and CharCol = :CharColVal");
if (!$stmt->execute(array(':IntColVal' => $IntColVal, ':CharColVal' => $CharColVal))) {
die("Test_3 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -50,10 +46,9 @@ try
// Test_4: Test single prepare, multiple execution with indexed parameters
echo "Test_4 : Test single prepare, multiple execution with indexed parameters :\n";
$IntColVal = 1;
$stmt = $db->prepare('select IntCol from ' . $table1 . ' where IntCol = ?');
$stmt = $db->prepare("select IntCol from $tbname where IntCol = ?");
$stmt->bindParam(1, $IntColVal);
if(!$stmt->execute())
{
if (!$stmt->execute()) {
die("Test_4 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -61,8 +56,7 @@ try
// Execute the stmt again
$IntColVal = 2;
if(!$stmt->execute())
{
if (!$stmt->execute()) {
die("Test_4 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -71,10 +65,9 @@ try
// Test_5: Test single prepare, multiple execution with named parameters
echo "Test_5 : Test single prepare, multiple execution with named parameters :\n";
$IntColVal = 1;
$stmt = $db->prepare('select IntCol from ' . $table1 . ' where IntCol = :IntColVal');
$stmt = $db->prepare("select IntCol from $tbname where IntCol = :IntColVal");
$stmt->bindParam(':IntColVal', $IntColVal);
if(!$stmt->execute())
{
if (!$stmt->execute()) {
die("Test_5 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
@ -82,15 +75,12 @@ try
// Execute the stmt again
$IntColVal = 2;
if(!$stmt->execute())
{
if (!$stmt->execute()) {
die("Test_5 failed.");
}
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
catch(PDOException $err)
{
} catch (PDOException $err) {
var_dump($err);
exit();
}

View file

@ -1,81 +1,82 @@
--TEST--
prepare with emulate prepare and binding integer
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require('MsSetup.inc');
$conn = new PDO( "sqlsrv:server=$server ; Database = $databaseName", $uid, $pwd);
require_once('MsCommon_mid-refactor.inc');
$tableName = "number_types";
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
$query = "IF OBJECT_ID('number_types') IS NOT NULL DROP TABLE [$tableName]";
$stmt = $conn->query($query);
$tableName = "number_types";
if (!isColEncrypted()) {
createTable($conn, $tableName, array("c1_decimal" => "decimal", "c2_money" => "money", "c3_float" => "float"));
} else {
// money is not supported for column encryption, use decimal(19,4) instead
createTable($conn, $tableName, array("c1_decimal" => "decimal", "c2_money" => "decimal(19,4)", "c3_float" => "float"));
}
$query = "CREATE TABLE [$tableName] (c1_decimal decimal, c2_money money, c3_float float)";
$stmt = $conn->query($query);
insertRow($conn, $tableName, array("c1_decimal" => 411.1, "c2_money" => 131.11, "c3_float" => 611.111));
insertRow($conn, $tableName, array("c1_decimal" => 422.2222, "c2_money" => 132.22, "c3_float" => 622.22));
insertRow($conn, $tableName, array("c1_decimal" => 433.333, "c2_money" => 133.3333, "c3_float" => 633.33333));
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (411.1, 131.11, 611.111)";
$stmt = $conn->query($query);
$query = "SELECT * FROM [$tableName] WHERE c3_float = :c3";
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (422.2222, 132.222, 622.22)";
$stmt = $conn->query($query);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$options = array(PDO::ATTR_EMULATE_PREPARES => false);
$stmt = $conn->prepare($query, $options);
$c3 = 611.111;
$stmt->bindParam(':c3', $c3);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (433.333, 133.3333, 633.33333 )";
$stmt = $conn->query($query);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bind param options:\n");
if (!isColEncrypted()) {
// emulate prepare is not supported for encrypted columns
$options = array(PDO::ATTR_EMULATE_PREPARES => true);
}
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c3', $c3);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "SELECT * FROM [$tableName] WHERE c3_float = :c3";
//with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false));
$c3 = 611.111;
$stmt->bindParam(':c3', $c3);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bind param options:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c3 = 611.111;
$stmt->bindParam(':c3', $c3);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c3 = 611.111;
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c3 = 611.111;
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c3 = 611.111;
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
if ($stmt->rowCount() == 0){
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c3', $c3, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
if ($stmt->rowCount() == 0) {
print_r("No results for this query\n");
}
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
$stmt = null;
$conn=null;
?>
--EXPECT--

View file

@ -1,80 +1,82 @@
--TEST--
prepare with emulate prepare and binding integer
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require('MsSetup.inc');
$conn = new PDO( "sqlsrv:server=$server ; Database = $databaseName", $uid, $pwd);
require_once('MsCommon_mid-refactor.inc');
try {
$conn = connect();
$tableName = "fruit";
//$tableName = "fruit";
$tableName = getTableName();
createTable($conn, $tableName, array("name" => "varchar(max)", "calories" => "int"));
$query = "IF OBJECT_ID('fruit') IS NOT NULL DROP TABLE [$tableName]";
$stmt = $conn->query($query);
insertRow($conn, $tableName, array("name" => "apple", "calories" => 150));
insertRow($conn, $tableName, array("name" => "banana", "calories" => 175));
insertRow($conn, $tableName, array("name" => "blueberry", "calories" => 1));
$query = "CREATE TABLE [$tableName] (name varchar(max), calories int)";
$stmt = $conn->query($query);
$query = "SELECT * FROM [$tableName] WHERE calories = :cal";
$query = "INSERT INTO [$tableName] (name, calories) VALUES ('apple', 150)";
$stmt = $conn->query($query);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$options = array(PDO::ATTR_EMULATE_PREPARES => false);
$stmt = $conn->prepare($query, $options);
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "INSERT INTO [$tableName] (name, calories) VALUES ('banana', 175)";
$stmt = $conn->query($query);
// prepare with emulate prepare
print_r("Prepare with emulate prepare and no bindParam options:\n");
if (!isColEncrypted()) {
// emulate prepare is not supported for encrypted columns
$options = array(PDO::ATTR_EMULATE_PREPARES => true);
}
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "INSERT INTO [$tableName] (name, calories) VALUES ('blueberry', 1)";
$stmt = $conn->query($query);
if (!isColEncrypted()) {
// without emulate prepare, binding PARAM_INT with SQLSRV_ENCODING_SYSTEM is not allowed
// thus these are not tested when Column Encryption is disabled
$query = "SELECT * FROM [$tableName] WHERE calories = :cal";
$results = array();
//prepare with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$results["SYSTEM"] = $stmt->fetch(PDO::FETCH_ASSOC);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false));
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$results["UTF8"] = $stmt->fetch(PDO::FETCH_ASSOC);
// prepare with emulate prepare
print_r("Prepare with emulate prepare and no bindParam options:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$results["BINARY"] = $stmt->fetch(PDO::FETCH_ASSOC);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
foreach ($results as $key => $value) {
if ($value['name'] != "blueberry" || $value['calories'] != 1) {
echo "Failed to fetch when binding parameter with $key encoding.\n";
}
}
}
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$cal = 1;
$stmt->bindParam(':cal', $cal, PDO::PARAM_INT, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
$stmt = null;
$conn=null;
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
?>
--EXPECT--
Prepare without emulate prepare:
Array
@ -88,21 +90,3 @@ Array
[name] => blueberry
[calories] => 1
)
Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:
Array
(
[name] => blueberry
[calories] => 1
)
Prepare with emulate prepare and and SQLSRV_ENCODING_SYSTEM:
Array
(
[name] => blueberry
[calories] => 1
)
Prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY:
Array
(
[name] => blueberry
[calories] => 1
)

View file

@ -1,81 +1,83 @@
--TEST--
prepare with emulate prepare and binding integer
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require('MsSetup.inc');
$conn = new PDO( "sqlsrv:server=$server ; Database = $databaseName", $uid, $pwd);
require_once('MsCommon_mid-refactor.inc');
$tableName = "number_types";
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
$query = "IF OBJECT_ID('number_types') IS NOT NULL DROP TABLE [$tableName]";
$stmt = $conn->query($query);
$tableName = "number_types";
if (!isColEncrypted()) {
createTable($conn, $tableName, array("c1_decimal" => "decimal", "c2_money" => "money", "c3_float" => "float"));
} else {
// money is not supported for column encryption, use decimal(19,4) instead
createTable($conn, $tableName, array("c1_decimal" => "decimal", "c2_money" => "decimal(19,4)", "c3_float" => "float"));
}
$query = "CREATE TABLE [$tableName] (c1_decimal decimal, c2_money money, c3_float float)";
$stmt = $conn->query($query);
insertRow($conn, $tableName, array("c1_decimal" => 411.1, "c2_money" => 131.11, "c3_float" => 611.111));
insertRow($conn, $tableName, array("c1_decimal" => 422.2222, "c2_money" => 132.22, "c3_float" => 622.22));
insertRow($conn, $tableName, array("c1_decimal" => 433.333, "c2_money" => 133.3333, "c3_float" => 633.33333));
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (411.1, 131.11, 611.111)";
$stmt = $conn->query($query);
$query = "SELECT * FROM [$tableName] WHERE c2_money = :c2";
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (422.2222, 132.222, 622.22)";
$stmt = $conn->query($query);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$options = array(PDO::ATTR_EMULATE_PREPARES => false);
$stmt = $conn->prepare($query, $options);
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (433.333, 133.3333, 633.33333 )";
$stmt = $conn->query($query);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bind param options:\n");
if (!isColEncrypted()) {
// emulate prepare is not supported for encrypted columns
$options = array(PDO::ATTR_EMULATE_PREPARES => true);
}
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c2', $c2);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
$query = "SELECT * FROM [$tableName] WHERE c2_money = :c2";
//with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
// prepare without emulate prepare
print_r("Prepare without emulate prepare:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false));
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bind param options:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//with emulate prepare and encoding SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$c2 = 133.3333;
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
if ($stmt->rowCount() == 0){
//prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, $options);
$stmt->bindParam(':c2', $c2, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
if ($stmt->rowCount() == 0) {
print_r("No results for this query\n");
}
}
$stmt = null;
$conn=null;
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
?>
--EXPECT--

View file

@ -1,89 +1,96 @@
--TEST--
prepare with emulate prepare and binding uft8 characters
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require('MsSetup.inc');
$conn = new PDO( "sqlsrv:server=$server ; Database = $databaseName", $uid, $pwd);
//$conn->setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION );
//$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 1 );
require_once('MsCommon_mid-refactor.inc');
$tableName = "users";
$query = "IF OBJECT_ID('users') IS NOT NULL DROP TABLE [$tableName]";
$stmt = $conn->query($query);
$query = "CREATE TABLE [$tableName] (name nvarchar(max), status int, age int)";
$stmt = $conn->query($query);
$query = "INSERT INTO [$tableName] (name, status, age) VALUES (N'Belle', 1, 34)";
$stmt = $conn->query($query);
$query = "INSERT INTO [$tableName] (name, status, age) VALUES (N'Абрам', 1, 40)";
$stmt = $conn->query($query);
$query = "INSERT INTO [$tableName] (name, status, age) VALUES (N'가각', 1, 30)";
$stmt = $conn->query($query);
$name = "가각";
$query = "SELECT * FROM [$tableName] WHERE name = :name AND status = 1";
//without emulate prepare
print_r("Prepare without emulate prepare:\n");
$stmt = $conn->prepare($query);
$stmt->bindParam(':name', $name, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bindParam options:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$stmt->bindParam(':name', $name );
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
if ($stmt->rowCount() == 0){
print_r("No results for this query\n");
function prepareStmt($conn, $query, $prepareOptions = array(), $dataType = null, $length = null, $driverOptions = null)
{
$name = "가각";
if (!isColEncrypted()) {
$stmt = $conn->prepare($query, $prepareOptions);
$stmt->bindParam(':name', $name, $dataType, $length, $driverOptions);
} else {
$status = 1;
$stmt = $conn->prepare($query, $prepareOptions);
$stmt->bindParam(':name', $name, $dataType, $length, $driverOptions);
$stmt->bindParam(':status', $status);
}
$stmt->execute();
return $stmt;
}
//with emulate prepare and SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$stmt->bindParam(':name', $name, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
//$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 1 );
//with emulate prepare and SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$stmt->bindParam(':name', $name, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
if ($stmt->rowCount() == 0){
$tableName = "users";
createTable($conn, $tableName, array("name" => "nvarchar(max)", "status" => "int", "age" => "int"));
if (!isColEncrypted()) {
$conn->exec("INSERT INTO [$tableName] (name, status, age) VALUES (N'Belle', 1, 34)");
$conn->exec("INSERT INTO [$tableName] (name, status, age) VALUES (N'Абрам', 1, 40)");
$conn->exec("INSERT INTO [$tableName] (name, status, age) VALUES (N'가각', 1, 30)");
$query = "SELECT * FROM [$tableName] WHERE name = :name AND status = 1";
} else {
insertRow($conn, $tableName, array("name" => "Belle", "status" => 1, "age" => 34));
insertRow($conn, $tableName, array("name" => "Абрам", "status" => 1, "age" => 40));
insertRow($conn, $tableName, array("name" => "가각", "status" => 1, "age" => 30));
$query = "SELECT * FROM [$tableName] WHERE name = :name AND status = :status";
}
//without emulate prepare
print_r("Prepare without emulate prepare:\n");
$stmt = prepareStmt($conn, $query, array(), PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
//with emulate prepare and no bind param options
print_r("Prepare with emulate prepare and no bindParam options:\n");
if (!isColEncrypted()) {
$options = array(PDO::ATTR_EMULATE_PREPARES => true);
} else {
$options = array(PDO::ATTR_EMULATE_PREPARES => false);
}
$stmt = prepareStmt($conn, $query, $options);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
if ($stmt->rowCount() == 0) {
print_r("No results for this query\n");
}
}
//with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY:\n");
$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true));
$stmt->bindParam(':name', $name, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
$row = $stmt->fetch( PDO::FETCH_ASSOC );
print_r($row);
if ($stmt->rowCount() == 0){
//with emulate prepare and SQLSRV_ENCODING_UTF8
print_r("Prepare with emulate prepare and SQLSRV_ENCODING_UTF8:\n");
$stmt = prepareStmt($conn, $query, $options, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_UTF8);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
//with emulate prepare and SQLSRV_ENCODING_SYSTEM
print_r("Prepare with emulate prepare and and SQLSRV_ENCODING_SYSTEM:\n");
$stmt = prepareStmt($conn, $query, $options, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_SYSTEM);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
if ($stmt->rowCount() == 0) {
print_r("No results for this query\n");
}
//with emulate prepare and encoding SQLSRV_ENCODING_BINARY
print_r("Prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY:\n");
$stmt = prepareStmt($conn, $query, $options, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$row = $stmt->fetch(PDO::FETCH_ASSOC);
print_r($row);
if ($stmt->rowCount() == 0) {
print_r("No results for this query\n");
}
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
//$query = "DROP TABLE [$tableName]";
//$stmt = $conn->query($query);
$stmt = null;
$conn=null;
?>
--EXPECT--

View file

@ -1,33 +1,28 @@
--TEST--
Test PDO::prepare by passing in invalid cursor value
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsSetup.inc");
try
{
$conn = new PDO( "sqlsrv:Server = $server; database = $databaseName", $uid, $pwd);
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
// PDO::CURSOR_FWDONLY should not be quoted
$stmt1 = $conn->prepare( "SELECT 1", array( PDO::ATTR_CURSOR => "PDO::CURSOR_FWDONLY" ));
$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 ));
$stmt2 = $conn->prepare("SELECT 2", array( PDO::ATTR_CURSOR => 10 ));
print_r(($conn->errorInfo())[2]);
echo "\n";
}
catch( PDOException $e ) {
var_dump( $e->errorInfo );
} 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

View file

@ -1,32 +1,28 @@
--TEST--
Test PDO::prepare by passing in invalid encoding values
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsSetup.inc");
try
{
$conn = new PDO( "sqlsrv:Server = $server; database = $databaseName", $uid, $pwd);
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
// PDO::SQLSRV_ENCODING_SYSTEM should not be quoted
$stmt1 = $conn->prepare( "SELECT 1", array( PDO::SQLSRV_ATTR_ENCODING => "PDO::SQLSRV_ENCODING_SYSTEM" ));
$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 ));
$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 );
} 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.

View file

@ -1,28 +1,23 @@
--TEST--
Test PDO::prepare by passing in a string key
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsSetup.inc");
require_once("MsCommon_mid-refactor.inc");
try
{
$dsn = "sqlsrv:Server = $server; database = $databaseName";
$attr = array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION);
$conn = new PDO( $dsn, $uid, $pwd, $attr);
try {
$conn = connect();
$stmt = $conn->prepare( "SELECT 1", array( "PDO::ATTR_CURSOR" => PDO::CURSOR_FWDONLY ));
$stmt = $conn->prepare("SELECT 1", array( "PDO::ATTR_CURSOR" => PDO::CURSOR_FWDONLY ));
echo "Test Successful";
}
catch( PDOException $e ) {
var_dump( $e->errorInfo );
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
?>
--EXPECT--
array(3) {
[0]=>
string(5) "IMSSP"

View file

@ -1,33 +1,29 @@
--TEST--
Test PDO::prepare by passing in invalid scrollable type value
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsSetup.inc");
try
{
$conn = new PDO( "sqlsrv:Server = $server; database = $databaseName", $uid, $pwd);
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
// 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" ));
$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 ));
$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 ){
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 ) {
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
--EXPECT--
Invalid values for PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE return false.

View file

@ -1,38 +1,34 @@
--TEST--
Test PDO::prepare by passing in attributes
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsSetup.inc");
require_once("MsCommon_mid-refactor.inc");
try
{
try {
class CustomPDOStatement extends PDOStatement
{
protected function __construct() {
protected function __construct()
{
}
}
$dsn = "sqlsrv:Server = $server; database = $databaseName";
$conn = connect();
$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, $uid, $pwd);
$stmt = $conn->prepare( "SELECT 1", $prep_attr );
PDO::SQLSRV_ATTR_FETCHES_NUMERIC_TYPE => true);
$stmt = $conn->prepare("SELECT 1", $prep_attr);
echo "Test Successful";
}
catch( PDOException $e ) {
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
--EXPECT--
Test Successful

View file

@ -3,78 +3,75 @@ Test the PDO::query() method.
--ENV--
PHPT_EXEC=true
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
function query_default( $conn )
function queryDefault($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from " . $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch();
var_dump($result);
}
function query_column( $conn )
function queryColumn($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from " . $table1, PDO::FETCH_COLUMN, 2 );
$stmt = $conn->query("Select * from $tbname", PDO::FETCH_COLUMN, 2);
$result = $stmt->fetch();
var_dump($result);
}
function query_class( $conn )
function queryClass($conn, $tbname)
{
global $table1;
global $table1_class;
$stmt = $conn->query( "Select * from " . $table1, PDO::FETCH_CLASS, $table1_class );
global $mainTypesClass;
$stmt = $conn->query("Select * from $tbname", PDO::FETCH_CLASS, $mainTypesClass);
$result = $stmt->fetch();
$result->dumpAll();
}
function query_into( $conn )
function queryInto($conn, $tbname)
{
global $table1;
global $table1_class;
$obj = new $table1_class;
$stmt = $conn->query( "Select * from " . $table1, PDO::FETCH_INTO, $obj );
global $mainTypesClass;
$obj = new $mainTypesClass;
$stmt = $conn->query("Select * from $tbname", PDO::FETCH_INTO, $obj);
$result = $stmt->fetch();
$result->dumpAll();
}
function query_empty_table( $conn )
function queryEmptyTable($conn)
{
CreateTableEx($conn, 'emptyTable', "c1 INT, c2 INT");
$stmt = $conn->query( "Select * from emptyTable");
createTable($conn, 'emptyTable', array("c1" => "int", "c2" => "int"));
$stmt = $conn->query("Select * from emptyTable");
$result = $stmt->fetch();
var_dump($result);
DropTable($conn, 'emptyTable');
dropTable($conn, 'emptyTable');
}
try
{
try {
$db = connect();
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
echo "TEST_1 : query with default fetch style :\n";
query_default($db);
queryDefault($db, $tbname);
echo "TEST_2 : query with FETCH_COLUMN :\n";
query_column($db);
queryColumn($db, $tbname);
echo "TEST_3 : query with FETCH_CLASS :\n";
query_class($db);
queryClass($db, $tbname);
echo "TEST_4 : query with FETCH_INTO :\n";
query_into($db);
queryInto($db, $tbname);
echo "TEST_5 : query an empty table :\n";
query_empty_table($db);
}
queryEmptyTable($db);
catch( PDOException $e ) {
var_dump( $e );
dropTable($db, $tbname);
unset($db);
} catch (PDOException $e) {
var_dump($e);
exit;
}

View file

@ -1,92 +1,67 @@
--TEST--
test query time out at the connection level and statement level
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
function QueryTimeout($connLevel)
{
require("MsSetup.inc");
$conn = connect('', array(), PDO::ERRMODE_SILENT);
$tableName = GetTempTableName();
$tableName = getTableName();
createTable($conn, $tableName, array("c1_int" => "int", "c2_varchar" => "varchar(25)"));
$conn = new PDO( "sqlsrv:server=$server;database=$databaseName", $uid, $pwd);
$stmt = $conn->exec("CREATE TABLE $tableName ([c1_int] int, [c2_varchar] varchar(25))");
$query = "INSERT INTO $tableName ([c1_int], [c2_varchar]) VALUES (1, 'QueryTimeout 1')";
$stmt = $conn->query($query);
$query = "INSERT INTO $tableName ([c1_int], [c2_varchar]) VALUES (2, 'QueryTimeout 2')";
$stmt = $conn->query($query);
insertRow($conn, $tableName, array("c1_int" => 1, "c2_varchar" => "QueryTimeout 1"));
insertRow($conn, $tableName, array("c1_int" => 2, "c2_varchar" => "QueryTimeout 2"));
$query = "SELECT * FROM $tableName";
if ($connLevel)
{
if ($connLevel) {
echo "Setting query timeout as an attribute in connection\n";
$conn->setAttribute(constant('PDO::SQLSRV_ATTR_QUERY_TIMEOUT'), 1);
$stmt = $conn->query("WAITFOR DELAY '00:00:03'; $query");
var_dump($conn->errorInfo());
}
else
{
} else {
echo "Setting query timeout in the statement\n";
$stmt = $conn->prepare("WAITFOR DELAY '00:00:03'; $query", array(constant('PDO::SQLSRV_ATTR_QUERY_TIMEOUT') => 1));
$stmt->execute();
var_dump($stmt->errorInfo());
}
$stmt = null;
$conn = null;
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
}
function RunTest()
{
StartTest("pdo_query_timeout");
echo "\nStarting test...\n";
try
{
echo "Starting test...\n";
try {
QueryTimeout(true);
QueryTimeout(false);
}
catch (Exception $e)
{
} catch (Exception $e) {
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("pdo_query_timeout");
}
RunTest();
echo "Done\n";
?>
--EXPECTREGEX--
Starting test\.\.\.
--EXPECT--
Starting test...
Setting query timeout as an attribute in connection
array\(3\) \{
\[0\]=>
string\(5\) \"HYT00\"
\[1\]=>
int\(0\)
\[2\]=>
string\(63\) \"\[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Query timeout expired\"
\}
array(3) {
[0]=>
string(5) "HYT00"
[1]=>
int(0)
[2]=>
string(63) "[Microsoft][ODBC Driver 13 for SQL Server]Query timeout expired"
}
Setting query timeout in the statement
array\(3\) \{
\[0\]=>
string\(5\) \"HYT00\"
\[1\]=>
int\(0\)
\[2\]=>
string\(63\) \"\[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\]Query timeout expired\"
\}
array(3) {
[0]=>
string(5) "HYT00"
[1]=>
int(0)
[2]=>
string(63) "[Microsoft][ODBC Driver 13 for SQL Server]Query timeout expired"
}
Done
Test \"pdo_query_timeout\" completed successfully\.

View file

@ -4,12 +4,10 @@ Test the PDO::quote() method.
<?php require('skipif.inc'); ?>
--FILE--
<?php
require_once("MsCommon.inc");
require_once 'MsCommon.inc';
try
{
$conn = connect(array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CASE => 2));
try {
$conn = connect("", array(PDO::SQLSRV_ATTR_ENCODING => 3, PDO::ATTR_CASE => 2));
$unquoted = "ABC'DE";
$quoted1 = $conn->quote($unquoted);
@ -18,10 +16,8 @@ try
var_dump($unquoted);
var_dump($quoted1);
var_dump($quoted2);
}
catch( PDOException $e ) {
var_dump( $e );
} catch (PDOException $e) {
var_dump($e);
exit;
}
?>

View file

@ -1,33 +1,27 @@
--TEST--
Test setting invalid value or key in connection attributes
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsSetup.inc");
try{
$dsn = "sqlsrv:Server = $server; database = $databaseName";
$conn = new PDO( $dsn, $uid, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
// Negative value for query timeout: should raise error
@$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, -1 );
print_r (($conn->errorInfo())[2]);
@$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 ){
@$conn->setAttribute(PDO::ATTR_CURSOR, PDO::CURSOR_SCROLL);
print_r(($conn->errorInfo())[2]);
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
--EXPECT--
Invalid value -1 specified for option PDO::SQLSRV_ATTR_QUERY_TIMEOUT.
The given attribute is only supported on the PDOStatement object.

View file

@ -1,36 +1,32 @@
--TEST--
Test setting invalid encoding attributes
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsSetup.inc");
require_once("MsCommon_mid-refactor.inc");
try{
$dsn = "sqlsrv:Server = $server; database = $databaseName";
$conn = new PDO( $dsn, $uid, $pwd, array(PDO::ATTR_ERRMODE => PDO::ERRMODE_SILENT));
try {
$conn = connect("", array(), PDO::ERRMODE_SILENT);
// valid option: should have no error
@$conn->setAttribute( PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_DEFAULT );
print_r (($conn->errorInfo())[2]);
@$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]);
@$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]);
@$conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_BINARY);
print_r(($conn->errorInfo())[2]);
echo "\n";
}
catch ( PDOException $e ){
} catch (PDOException $e) {
echo $e->getMessage();
}
?>
--EXPECT--

View file

@ -1,180 +1,158 @@
--TEST--
test rowCount() with different querying method and test nextRowset() with different fetch
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
include_once("MsCommon_mid-refactor.inc");
function RowCount_Query($exec)
function rowCountQuery($exec)
{
require("MsSetup.inc");
$conn = connect();
$tableName = GetTempTableName('testRowCount');
$conn = new PDO( "sqlsrv:server=$server;database=$databaseName", $uid, $pwd);
$stmt = $conn->exec("CREATE TABLE $tableName ([c1_int] int, [c2_real] real)");
$tableName = getTableName('testRowCount');
createTable($conn, $tableName, array("c1_int" => "int", "c2_real" => "real"));
$numRows = 5;
for ($i = 1; $i <= $numRows; $i++)
{
InsertData($conn, $tableName, $i);
for ($i = 1; $i <= $numRows; $i++) {
$r = $i * 1.0;
insertRow($conn, $tableName, array("c1_int" => $i, "c2_real" => $r));
}
FetchRowsets($conn, $tableName, $numRows);
fetchRowsets($conn, $tableName, $numRows);
for ($i = 1; $i <= $numRows; $i++)
{
UpdateData($conn, $tableName, $i, $exec);
for ($i = 1; $i <= $numRows; $i++) {
updateData($conn, $tableName, $i, $exec);
}
DeleteData($conn, $tableName, $exec);
deleteData($conn, $tableName, $exec);
$stmt = null;
$conn = null;
dropTable($conn, $tableName);
unset($stmt);
unset($conn);
}
function InsertData($conn, $tableName, $value)
{
$query = "INSERT INTO $tableName VALUES ($value, $value * 1.0)";
$stmt = $conn->query($query);
}
function UpdateData($conn, $tableName, $value, $exec)
function updateData($conn, $tableName, $value, $exec)
{
$newValue = $value * 100;
$query = "UPDATE $tableName SET c1_int = $newValue WHERE (c1_int = $value)";
$rowCount = 0;
if ($exec)
{
if (isColEncrypted()) {
// need to bind parameters for updating encrypted columns
$query = "UPDATE $tableName SET c1_int = ? WHERE (c1_int = ?)";
$stmt = $conn->prepare($query);
$stmt->bindParam(1, $newValue);
$stmt->bindParam(2, $value);
$stmt->execute();
$rowCount = $stmt->rowCount();
} else {
if ($exec) {
$rowCount = $conn->exec($query);
}
else
{
} else {
$stmt = $conn->prepare($query);
$rowCount = $stmt->rowCount();
if ($rowCount > 0)
if ($rowCount > 0) {
echo "Number of rows affected prior to execution should be 0!\n";
}
$stmt->execute();
$rowCount = $stmt->rowCount();
}
if ($rowCount !== 1)
}
if ($rowCount !== 1) {
echo "Number of rows affected should be 1!\n";
$stmt = null;
}
unset($stmt);
}
function CompareValues($actual, $expected)
function compareValues($actual, $expected)
{
if ($actual != $expected)
{
if ($actual != $expected) {
echo "Unexpected value $value returned! Expected $expected.\n";
}
}
function FetchRowsets($conn, $tableName, $numRows)
function fetchRowsets($conn, $tableName, $numRows)
{
if (!isColEncrypted()) {
$query = "SELECT [c1_int] FROM $tableName ORDER BY [c1_int]";
} else {
// ORDER BY is not supported in encrypted columns
$query = "SELECT [c1_int] FROM $tableName";
}
$queries = $query . ';' . $query . ';' . $query;
$stmt = $conn->query($queries);
$i = 0;
while ($row = $stmt->fetch(PDO::FETCH_LAZY))
{
while ($row = $stmt->fetch(PDO::FETCH_LAZY)) {
$value = (int)$row['c1_int'];
CompareValues($value, ++$i);
compareValues($value, ++$i);
}
if ($i != $numRows)
{
if ($i != $numRows) {
echo "Number of rows fetched $i is unexpected!\n";
}
$result = $stmt->nextRowset();
if ($result == false)
{
if ($result == false) {
echo "Missing result sets!\n";
}
$rows = $stmt->fetchAll(PDO::FETCH_NUM);
$i = 0;
foreach ($rows as $row)
{
foreach ($row as $key => $value)
{
foreach ($rows as $row) {
foreach ($row as $key => $value) {
$value = (int)$value;
CompareValues($value, ++$i);
compareValues($value, ++$i);
}
}
$result = $stmt->nextRowset();
if ($result == false)
{
if ($result == false) {
echo "Missing result sets!\n";
}
$stmt->bindColumn('c1_int', $value);
$i = 0;
while ($row = $stmt->fetch(PDO::FETCH_BOUND))
{
CompareValues($value, ++$i);
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
compareValues($value, ++$i);
}
$result = $stmt->nextRowset();
if ($result != false)
{
if ($result != false) {
echo "Number of result sets exceeding expectation!\n";
}
}
function DeleteData($conn, $tableName, $exec)
function deleteData($conn, $tableName, $exec)
{
$query = "DELETE TOP(3) FROM $tableName";
$rowCount = 0;
if ($exec)
{
if ($exec) {
$rowCount = $conn->exec($query);
}
else
{
} else {
$stmt = $conn->query($query);
$rowCount = $stmt->rowCount();
}
if ($rowCount <= 0)
if ($rowCount <= 0) {
echo "Number of rows affected should be > 0!\n";
}
$stmt = null;
unset($stmt);
}
function RunTest()
{
StartTest("pdo_statement_rowcount_query");
echo "\nStarting test...\n";
try
{
RowCount_Query(true);
RowCount_Query(false);
}
catch (Exception $e)
{
echo "Starting test...\n";
try {
rowCountQuery(true);
//rowCountQuery(false);
} catch (Exception $e) {
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("pdo_statement_rowcount_query");
}
RunTest();
echo "Done\n";
?>
--EXPECT--
Starting test...
Done
Test "pdo_statement_rowcount_query" completed successfully.

View file

@ -1,15 +1,15 @@
--TEST--
call stored procedures with inputs of ten different datatypes to get outputs of various types
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
include 'MsCommon.inc';
include_once("MsCommon_mid-refactor.inc");
function ProcFetch_BigInt($conn)
function procFetchBigInt($conn)
{
$procName = GetTempProcName('bigint');
$procName = getProcName('bigint');
$stmt = $conn->exec("CREATE PROC $procName (@p1 BIGINT, @p2 BIGINT, @p3 NCHAR(128) OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(NCHAR(128), @p1 + @p2) END");
@ -26,17 +26,17 @@ function ProcFetch_BigInt($conn)
$expected = "23456789";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Decimal($conn)
function procFetchDecimal($conn)
{
$procName = GetTempProcName('decimal');
$procName = getProcName('decimal');
$stmt = $conn->exec("CREATE PROC $procName (@p1 DECIMAL, @p2 DECIMAL, @p3 CHAR(128) OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(CHAR(128), @p1 + @p2) END");
@ -53,17 +53,17 @@ function ProcFetch_Decimal($conn)
$expected = "7";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Float($conn)
function procFetchFloat($conn)
{
$procName = GetTempProcName('float');
$procName = getProcName('float');
$stmt = $conn->exec("CREATE PROC $procName (@p1 FLOAT, @p2 FLOAT, @p3 FLOAT OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(FLOAT, @p1 + @p2) END");
@ -80,17 +80,17 @@ function ProcFetch_Float($conn)
$expected = "7.75";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Int($conn)
function procFetchInt($conn)
{
$procName = GetTempProcName('int');
$procName = getProcName('int');
$stmt = $conn->exec("CREATE PROC $procName (@p1 INT, @p2 INT, @p3 INT OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(INT, @p1 + @p2) END");
@ -107,17 +107,17 @@ function ProcFetch_Int($conn)
$expected = "6912";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Money($conn)
function procFetchMoney($conn)
{
$procName = GetTempProcName('money');
$procName = getProcName('money');
$stmt = $conn->exec("CREATE PROC $procName (@p1 MONEY, @p2 MONEY, @p3 MONEY OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(MONEY, @p1 + @p2) END");
@ -134,17 +134,17 @@ function ProcFetch_Money($conn)
$expected = "38.40";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Numeric($conn)
function procFetchNumeric($conn)
{
$procName = GetTempProcName('numeric');
$procName = getProcName('numeric');
$stmt = $conn->exec("CREATE PROC $procName (@p1 NUMERIC, @p2 NUMERIC, @p3 NCHAR(128) OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(NCHAR(128), @p1 + @p2) END");
@ -161,17 +161,17 @@ function ProcFetch_Numeric($conn)
$expected = "8";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_Real($conn)
function procFetchReal($conn)
{
$procName = GetTempProcName('real');
$procName = getProcName('real');
$stmt = $conn->exec("CREATE PROC $procName (@p1 REAL, @p2 REAL, @p3 REAL OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(REAL, @p1 + @p2) END");
@ -188,17 +188,17 @@ function ProcFetch_Real($conn)
$expected = "10";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_SmallInt($conn)
function procFetchSmallInt($conn)
{
$procName = GetTempProcName('smallint');
$procName = getProcName('smallint');
$stmt = $conn->exec("CREATE PROC $procName (@p1 SMALLINT, @p2 SMALLINT, @p3 NCHAR(32) OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(NCHAR(32), @p1 + @p2) END");
@ -215,17 +215,17 @@ function ProcFetch_SmallInt($conn)
$expected = "90";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($conn);
}
function ProcFetch_SmallMoney($conn)
function procFetchSmallMoney($conn)
{
$procName = GetTempProcName('smallmoney');
$procName = getProcName('smallmoney');
$stmt = $conn->exec("CREATE PROC $procName (@p1 SMALLMONEY, @p2 SMALLMONEY, @p3 SMALLMONEY OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(SMALLMONEY, @p1 + @p2) END");
@ -242,17 +242,17 @@ function ProcFetch_SmallMoney($conn)
$expected = "21.70";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function ProcFetch_TinyInt($conn)
{
$procName = GetTempProcName('tinyint');
$procName = getProcName('tinyint');
$stmt = $conn->exec("CREATE PROC $procName (@p1 TINYINT, @p2 TINYINT, @p3 CHAR(32) OUTPUT)
AS BEGIN SELECT @p3 = CONVERT(CHAR(32), @p1 + @p2) END");
@ -269,52 +269,35 @@ function ProcFetch_TinyInt($conn)
$expected = "23";
$outValue = trim($outValue);
if (strncasecmp($outValue, $expected, strlen($expected)))
{
if (strncasecmp($outValue, $expected, strlen($expected))) {
echo "Output value $outValue is unexpected! Expected $expected\n";
}
$stmt = null;
dropProc($conn, $procName);
unset($stmt);
}
function RunTest()
{
set_time_limit(0);
StartTest("pdo_stored_proc_fetch_datatypes");
echo "\nStarting test...\n";
try
{
include("MsSetup.inc");
$conn = new PDO( "sqlsrv:server=$server;database=$databaseName", $uid, $pwd);
set_time_limit(0);
echo "Starting test...\n";
try {
$conn = connect();
ProcFetch_BigInt($conn);
ProcFetch_Decimal($conn);
ProcFetch_Float($conn);
ProcFetch_Int($conn);
ProcFetch_Money($conn);
ProcFetch_Numeric($conn);
ProcFetch_Real($conn);
ProcFetch_SmallInt($conn);
ProcFetch_SmallMoney($conn);
procFetchBigInt($conn);
procFetchDecimal($conn);
procFetchFloat($conn);
procFetchInt($conn);
procFetchMoney($conn);
procFetchNumeric($conn);
procFetchReal($conn);
procFetchSmallInt($conn);
procFetchSmallMoney($conn);
ProcFetch_TinyInt($conn);
$conn = null;
}
catch (Exception $e)
{
unset($conn);
} catch (Exception $e) {
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("pdo_stored_proc_fetch_datatypes");
}
RunTest();
echo "Done\n";
?>
--EXPECT--
Starting test...
Done
Test "pdo_stored_proc_fetch_datatypes" completed successfully.

View file

@ -1,494 +0,0 @@
--TEST--
Test the different type of data for retrieving
--SKIPIF--
<?php require('skipif.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
function testBigInt()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT BigIntCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testBit()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT BitCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testInt()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT IntCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testSmallInt()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT SmallIntCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testTinyInt()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT TinyIntCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDecimal()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT DecimalCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNumeric()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT NumCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testMoney()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT MoneyCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testSmallMoney()
{
$db = connect();
// Retrieve data type
$stmt = $db->query("SELECT SmallMoneyCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testFloat()
{
$db = connect();
$stmt = $db->query("SELECT FloatCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testReal()
{
$db = connect();
$stmt = $db->query("SELECT RealCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testChar()
{
$db = connect();
$stmt = $db->query("SELECT CharCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarchar()
{
$db = connect();
$stmt = $db->query("SELECT VarcharCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testText()
{
$db = connect();
$stmt = $db->query("SELECT TextCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNText()
{
$db = connect();
$stmt = $db->query("SELECT NTextCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNChar()
{
$db = connect();
$stmt = $db->query("SELECT NCharCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNVarchar()
{
$db = connect();
$stmt = $db->query("SELECT NVarcharCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testImage()
{
$db = connect();
$stmt = $db->query("SELECT ImageCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testBinary()
{
$db = connect();
$stmt = $db->query("SELECT BinaryCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarbinary()
{
$db = connect();
$stmt = $db->query("SELECT VarbinaryCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDateTime2()
{
$db = connect();
$stmt = $db->query("SELECT DateTime2Col FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDatetimeoffset()
{
$db = connect();
$stmt = $db->query("SELECT DTOffsetCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testsmalldatetime()
{
$db = connect();
$stmt = $db->query("SELECT SmallDTCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDateTime()
{
$db = connect();
$stmt = $db->query("SELECT DateTimeCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDate()
{
$db = connect();
$stmt = $db->query("SELECT DateCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNVarcharMax()
{
$db = connect();
$stmt = $db->query("SELECT NVarCharMaxCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testTime()
{
$db = connect();
$stmt = $db->query("SELECT TimeCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testUniqueidentifier()
{
$db = connect();
$stmt = $db->query("SELECT Guidcol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarbinaryMax()
{
$db = connect();
$stmt = $db->query("SELECT VarbinaryMaxCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarcharMax()
{
$db = connect();
$stmt = $db->query("SELECT VarcharMaxCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testXml()
{
$db = connect();
$stmt = $db->query("SELECT XmlCol FROM PDO_AllTypes");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
try
{
//$db = connect();
//$sql = "INSERT INTO PDO_AllTypes(BigIntCol,BitCol,IntCol,) VALUES(" . GetSampleData(4) . ",1,)";
//$numRows = $db->exec($sql);
echo "Test_1 : bigint data type :\n";
testBigInt();
echo "Test_2 : bit data type :\n";
testBit();
echo "Test_3 : int data type :\n";
testInt();
echo "Test_4 : smallint data type:\n";
testSmallInt();
echo "Test_5 : tinyint data type:\n";
testTinyInt();
echo "Test_6 : decimal data type:\n";
testDecimal();
echo "Test_7 : numeric data type:\n";
testNumeric();
echo "Test_8 : money data type:\n";
testMoney();
echo "Test_9 : smallmoney data type:\n";
testSmallMoney();
echo "Test_10 : float data type:\n";
testFloat();
echo "Test_11 : real data type:\n";
testReal();
echo "Test_12 : char data type:\n";
testChar();
echo "Test_13 : varchar data type:\n";
testVarchar();
echo "Test_14 : text data type:\n";
testText();
echo "Test_15 : nchar data type:\n";
testNChar();
echo "Test_16 : nvarchar data type:\n";
testNVarchar();
echo "Test_17 : image data type:\n";
testImage();
echo "Test_18 : binary data type:\n";
testBinary();
echo "Test_19 : varbinary data type:\n";
testVarbinary();
echo "Test_20 : smalldatetime data type:\n";
testsmalldatetime();
echo "Test_21 : datetime data type:\n";
testDateTime();
echo "Test_22 : datetime2 data type:\n";
testsmalldatetime();
echo "Test_23 : datetimeoffset data type:\n";
testDatetimeoffset();
echo "Test_24 : time data type:\n";
testTime();
echo "Test_25 : Uniqueidentifier data type:\n";
testUniqueidentifier();
echo "Test_26 : VarbinaryMax data type:\n";
testVarbinaryMax();
echo "Test_27 : VarcharMax data type:\n";
testVarcharMax();
echo "Test_28 : xml data type:\n";
testXml();
echo "Test_29 : ntext data type:\n";
testNText();
echo "Test_30 : nvarcharmax data type:\n";
testNVarcharMax();
}
catch (PDOException $e)
{
var_dump($e);
}
?>
--EXPECT--
Test_1 : bigint data type :
array(1) {
["BigIntCol"]=>
string(1) "1"
}
Test_2 : bit data type :
array(1) {
["BitCol"]=>
string(1) "0"
}
Test_3 : int data type :
array(1) {
["IntCol"]=>
string(1) "1"
}
Test_4 : smallint data type:
array(1) {
["SmallIntCol"]=>
string(1) "1"
}
Test_5 : tinyint data type:
array(1) {
["TinyIntCol"]=>
string(1) "1"
}
Test_6 : decimal data type:
array(1) {
["DecimalCol"]=>
string(3) "111"
}
Test_7 : numeric data type:
array(1) {
["NumCol"]=>
string(1) "1"
}
Test_8 : money data type:
array(1) {
["MoneyCol"]=>
string(8) "111.1110"
}
Test_9 : smallmoney data type:
array(1) {
["SmallMoneyCol"]=>
string(8) "111.1110"
}
Test_10 : float data type:
array(1) {
["FloatCol"]=>
string(7) "111.111"
}
Test_11 : real data type:
array(1) {
["RealCol"]=>
string(7) "111.111"
}
Test_12 : char data type:
array(1) {
["CharCol"]=>
string(10) "STRINGCOL1"
}
Test_13 : varchar data type:
array(1) {
["VarcharCol"]=>
string(10) "STRINGCOL1"
}
Test_14 : text data type:
array(1) {
["TextCol"]=>
string(420) " 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417."
}
Test_15 : nchar data type:
array(1) {
["NCharCol"]=>
string(10) "STRINGCOL1"
}
Test_16 : nvarchar data type:
array(1) {
["NVarcharCol"]=>
string(10) "STRINGCOL1"
}
Test_17 : image data type:
array(1) {
["ImageCol"]=>
string(1) ""
}
Test_18 : binary data type:
array(1) {
["BinaryCol"]=>
string(5) ""
}
Test_19 : varbinary data type:
array(1) {
["VarbinaryCol"]=>
string(1) ""
}
Test_20 : smalldatetime data type:
array(1) {
["SmallDTCol"]=>
string(19) "2000-11-11 11:11:00"
}
Test_21 : datetime data type:
array(1) {
["DateTimeCol"]=>
string(23) "2000-11-11 11:11:11.110"
}
Test_22 : datetime2 data type:
array(1) {
["SmallDTCol"]=>
string(19) "2000-11-11 11:11:00"
}
Test_23 : datetimeoffset data type:
array(1) {
["DTOffsetCol"]=>
string(34) "2000-11-11 11:11:11.1110000 +00:00"
}
Test_24 : time data type:
array(1) {
["TimeCol"]=>
string(16) "11:11:11.1110000"
}
Test_25 : Uniqueidentifier data type:
array(1) {
["Guidcol"]=>
string(36) "AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA"
}
Test_26 : VarbinaryMax data type:
array(1) {
["VarbinaryMaxCol"]=>
string(1) ""
}
Test_27 : VarcharMax data type:
array(1) {
["VarcharMaxCol"]=>
string(420) " 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417."
}
Test_28 : xml data type:
array(1) {
["XmlCol"]=>
string(431) "<xml> 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>"
}
Test_29 : ntext data type:
array(1) {
["NTextCol"]=>
string(420) " 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417."
}
Test_30 : nvarcharmax data type:
array(1) {
["NVarCharMaxCol"]=>
string(420) " 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417."
}

View file

@ -3,49 +3,67 @@ test transaction rollback and commit
--DESCRIPTION--
starts a transaction, delete rows and rollback the transaction; starts a transaction, delete rows and commit
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsSetup.inc");
require_once("MsCommon_mid-refactor.inc");
$conn = new PDO( "sqlsrv:Server=$server; database = $databaseName", $uid, $pwd);
function deleteRows($conn, $tbname)
{
if (!isColEncrypted()) {
$rows = $conn->exec("DELETE FROM $tbname WHERE col1 = 'a'");
} else {
// needs to find parameter for encrypted columns
$sql = "DELETE FROM $tbname WHERE col1 = ?";
$stmt = $conn->prepare($sql);
$col1 = "a";
$stmt->execute(array($col1));
$rows = $stmt->rowCount();
}
return $rows;
}
$conn->exec("IF OBJECT_ID('Table1', 'U') IS NOT NULL DROP TABLE Table1");
$conn->exec("CREATE TABLE Table1(col1 CHARACTER(1), col2 CHARACTER(1))");
try {
$conn = connect();
$ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'b')");
$ret = $conn->exec("INSERT INTO Table1(col1, col2) VALUES('a', 'c')");
$tbname = "Table1";
createTable($conn, $tbname, array("col1" => "char(1)", "col2" => "char(1)"));
insertRow($conn, $tbname, array("col1" => "a", "col2" => "b"));
insertRow($conn, $tbname, array("col1" => "a", "col2" => "c"));
//revert the inserts but roll back
$conn->beginTransaction();
$rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'");
$rows = deleteRows($conn, $tbname);
$conn->rollback();
$stmt = $conn->query("SELECT * FROM Table1");
$stmt = $conn->query("SELECT * FROM $tbname");
// Table1 should still have 2 rows since delete was rolled back
if ( count( $stmt->fetchAll() ) == 2 )
if (count($stmt->fetchAll()) == 2) {
echo "Transaction rolled back successfully\n";
else
} else {
echo "Transaction failed to roll back\n";
}
//revert the inserts then commit
$conn->beginTransaction();
$rows = $conn->exec("DELETE FROM Table1 WHERE col1 = 'a'");
$rows = deleteRows($conn, $tbname);
$conn->commit();
echo $rows." rows affected\n";
$stmt = $conn->query("SELECT * FROM Table1");
if ( count( $stmt->fetchAll() ) == 0 )
$stmt = $conn->query("SELECT * FROM $tbname");
if (count($stmt->fetchAll()) == 0) {
echo "Transaction committed successfully\n";
else
} 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;
dropTable($conn, $tbname);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e->errorInfo);
}
?>
--EXPECT--
Transaction rolled back successfully

View file

@ -1,70 +1,61 @@
--TEST--
Test Transactions.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
// commit
function test1($conn)
function test1($conn, $tbname)
{
global $table1;
$conn->beginTransaction();
$stmt = $conn->query( "Insert into " .$table1 . " (NCharCol, IntCol) values ('NCharCol3', 3)" );
insertRow($conn, $tbname, array("NCharCol" => "NCharCol3", "IntCol" => 3));
$conn->commit();
echo "\nTest 1 Passed]\n";
echo "Test 1 Passed\n";
}
// rollback
function test2($conn)
function test2($conn, $tbname)
{
global $table1;
$conn->beginTransaction();
$stmt = $conn->query( "Insert into " .$table1 . " (NCharCol, IntCol) values ('NCharCol3', 3)" );
insertRow($conn, $tbname, array("NCharCol" => "NCharCol3", "IntCol" => 3));
$conn->rollBack();
echo "Test 2 Passed\n";
}
// commit
function test3($conn)
function test3($conn, $tbname)
{
global $table1;
$conn->beginTransaction();
$stmt = $conn->query( "Insert into " .$table1 . " (NCharCol, IntCol) values ('NCharCol3', 3)" );
insertRow($conn, $tbname, array("NCharCol" => "NCharCol3", "IntCol" => 3));
$conn->commit();
echo "Test 3 Passed\n";
}
// Rollback twice. Verify that error is thrown
function test4($conn)
function test4($conn, $tbname)
{
try {
global $table1;
$conn->beginTransaction();
$stmt = $conn->query( "Insert into " .$table1 . " (NCharCol, IntCol) values ('NCharCol3', 3)" );
insertRow($conn, $tbname, array("NCharCol" => "NCharCol3", "IntCol" => 3));
$conn->rollBack();
$conn->rollBack();
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Test4: ". $e->getMessage() . "\n";
}
}
// Commit twice Verify that error is thrown
function test5($conn)
function test5($conn, $tbname)
{
try {
global $table1;
$conn->beginTransaction();
$stmt = $conn->query( "Insert into " .$table1 . " (NCharCol, IntCol) values ('NCharCol3', 3)" );
insertRow($conn, $tbname, array("NCharCol" => "NCharCol3", "IntCol" => 3));
$conn->commit();
$conn->commit();
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Test5: ". $e->getMessage() . "\n";
}
}
@ -75,36 +66,31 @@ function test6($conn)
try {
$conn->beginTransaction();
$conn->beginTransaction();
}
catch( PDOException $e )
{
} catch (PDOException $e) {
echo "Test6: ". $e->getMessage() . "\n";
}
}
try
{
try {
$db = connect();
create_and_insert_table1( $db );
test1($db);
test2($db);
test3($db);
test4($db);
test5($db);
$tbname = "PDO_MainTypes";
createTableMainTypes($db, $tbname);
test1($db, $tbname);
test2($db, $tbname);
test3($db, $tbname);
test4($db, $tbname);
test5($db, $tbname);
test6($db);
}
catch( PDOException $e ) {
var_dump( $e );
dropTable($db, $tbname);
unset($conn);
} catch (PDOException $e) {
var_dump($e);
exit;
}
?>
--EXPECT--
Test 1 Passed]
Test 1 Passed
Test 2 Passed
Test 3 Passed
Test4: There is no active transaction

View file

@ -1,26 +1,27 @@
--TEST--
UTF-8 connection strings
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCOmmon_mid-refactor.inc");
$server = 'localhost';
$databaseName = 'test';
$uid = 'sa';
$pwd = 'Sunshine4u';
$server = 'localhost';
$databaseName = 'test';
$uid = 'sa';
$pwd = 'Sunshine4u';
// test an invalid connection credentials
$c = new PDO('sqlsrv:Server=' . $server . ';Database=' . $databaseName, $uid, $pwd);
if( $c !== false )
{
die( "Should have failed to connect." );
}
$dsn = getDSN($server, $databaseName);
// test an invalid connection credentials
$c = new PDO($dsn, $uid, $pwd);
if ($c !== false) {
die("Should have failed to connect.");
}
?>
--EXPECTREGEX--
Fatal error: Uncaught PDOException: SQLSTATE\[(28000|08001|HYT00)\]: .*\[Microsoft\]\[ODBC Driver 1[1-9] for SQL Server\](\[SQL Server\])?(Named Pipes Provider: Could not open a connection to SQL Server \[2\]\. |Login timeout expired|Login failed for user 'sa'\.) in .+(\/|\\)pdo_utf8_conn\.php:[0-9]+
Fatal error: Uncaught PDOException: SQLSTATE\[(28000|08001|HYT00)\]: .*\[Microsoft\]\[ODBC Driver 1[0-9] for SQL Server\](\[SQL Server\])?(Named Pipes Provider: Could not open a connection to SQL Server \[2\]\. |Login timeout expired|Login failed for user 'sa'\.) in .+(\/|\\)pdo_utf8_conn\.php:[0-9]+
Stack trace:
#0 .+(\/|\\)pdo_utf8_conn\.php\([0-9]+\): PDO->__construct\('sqlsrv:Server=l\.\.\.', 'sa', 'Sunshine4u'\)
#1 {main}

View file

@ -1,7 +1,7 @@
--TEST--
PDOStatement::BindParam for predefined constants and buffered query.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
@ -13,188 +13,194 @@ PDOStatement::BindParam for predefined constants and buffered query.
//*************************************************************************************
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
function insert($db)
function insert($db, $tbname)
{
$query = "DECLARE @string VARCHAR(MAX) = '0000000000'";
$query .= "DECLARE @string1 VARCHAR(MAX) = '00'";
$query .= "DECLARE @bin VARBINARY(MAX)";
$query .= "DECLARE @bin1 VARBINARY(2)";
$query .= "SET @bin = CAST(@string AS VARBINARY(MAX))";
$query .= "SET @bin1 = CAST(@string1 AS VARBINARY(2))";
$query .= "INSERT INTO PDO_AllTypes (";
$query .= "BigIntCol,BitCol,IntCol,";
$query .= "SmallIntCol,TinyIntCol,";
$query .= "DecimalCol,NumCol,MoneyCol,";
$query .= "SmallMoneyCol,FloatCol,RealCol,";
$query .= "CharCol,VarcharCol,TextCol,";
$query .= "NCharCol,NVarcharCol,ImageCol,";
$query .= "BinaryCol,VarbinaryCol,SmallDTCol,";
$query .= "DateTimeCol,DTOffsetCol,";
$query .= "TimeCol,Guidcol,VarbinaryMaxCol,";
$query .= "VarcharMaxCol,XmlCol,NTextCol,";
$query .= "NVarCharMaxCol) VALUES (0,'0',0,1,1,111,1,";
$query .= "111.1110,111.1110,111.111,111.111,";
$query .= "'STRINGCOL2','STRINGCOL2',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'STRINGCOL2','STRINGCOL2','00',";
$query .= "CONVERT(BINARY(2),@bin),CONVERT(VARBINARY(2),@bin1),'2000-11-11 11:11:00',";
$query .= "'2000-11-11 11:11:11.110',";
$query .= "'2000-11-11 11:11:11.1110000 +00:00','11:11:11.1110000',";
$query .= "'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA',CONVERT(VARBINARY(MAX),@bin1) ,";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'<xml> 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',";
$query .= "'1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.')";
$numRows = $db->exec($query);
$bin = fopen('php://memory', 'a');
fwrite($bin, '00');
rewind($bin);
$inputs = array("BigIntCol" => 0,
"BitCol" => '0',
"IntCol" => 0,
"SmallIntCol" => 1,
"TinyIntCol" => 1,
"DecimalCol" => 111,
"NumCol" => 1,
"MoneyCol" => 111.1110,
"SmallMoneyCol" => 111.1110,
"FloatCol" => 111.111,
"RealCol" => 111.111,
"CharCol" => 'STRINGCOL2',
"VarcharCol" => 'STRINGCOL2',
"TextCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"NCharCol" => 'STRINGCOL2',
"NVarcharCol" => 'STRINGCOL2',
"ImageCol" => new BindParamOp(17, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"BinaryCol" => new BindParamOp(18, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarbinaryCol" => new BindParamOp(19, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"SmallDTCol" => '2000-11-11 11:11:00',
"DateTimeCol" => '2000-11-11 11:11:11.110',
"DTOffsetCol" => '2000-11-11 11:11:11.1110000 +00:00',
"TimeCol" => '11:11:11.1110000',
"Guidcol" => 'AAAAAAAA-AAAA-AAAA-AAAA-AAAAAAAAAAAA',
"VarbinaryMaxCol" => new BindParamOp(25, $bin, "PDO::PARAM_LOB", 0, "PDO::SQLSRV_ENCODING_BINARY"),
"VarcharMaxCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"XmlCol" => '<xml> 1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>',
"NTextCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.',
"NVarCharMaxCol" => '1 This is a really large string used to test certain large data types like xml data type. The length of this string is greater than 256 to correctly test a large data type. This is currently used by atleast varchar type and by xml type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.');
$stmt = insertRow($db, $tbname, $inputs, "prepareBindParam");
unset($stmt);
echo "Insert complete!\n";
}
function bindParam_LOB($db)
function bindPARAM_LOB($db, $tbname)
{
// Binding LOB with buffered queries activated.
$noteID = fopen('php://memory', 'a');
$data = '0';
$query = "UPDATE PDO_AllTypes SET [VarbinaryCol]=:Name WHERE [BitCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$query = "UPDATE $tbname SET [VarbinaryCol]=:Name WHERE [BitCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
fwrite($noteID, '00');
rewind($noteID);
$stmt->bindParam(':Name',$noteID,PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->bindParam(':value',$data);
$stmt->bindParam(':Name', $noteID, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->bindParam(':value', $data);
$result = $stmt->execute();
$select = "SELECT * FROM PDO_AllTypes WHERE [BitCol]=:value";
$stmt = $db->prepare($select,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data);
$select = "SELECT * FROM $tbname WHERE [BitCol]=:value";
$stmt = $db->prepare($select, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data);
$stmt->execute();
$result = $stmt->fetchColumn(26); // Retrieve VarbinaryCol
unset($stmt);
print("$result\n");
}
function bindParam_STR($db)
function bindPARAM_STR($db, $tbname)
{
// Binding STR with buffered queries activated.
$noteID = fopen('php://memory', 'a');
// fopen returns a resource, if using PDO::PARAM_STR, the PDO side converts it to a zend_string "Resource id #*"
// thus a resource is not meant to bind parameter using PDO::PARAM_STR
$noteID = '1';
$data = 'STRINGCOL2';
$query = "UPDATE PDO_AllTypes SET [BitCol]=:Name WHERE [CharCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
fwrite($noteID, '1');
rewind($noteID);
$stmt->bindParam(':Name',$noteID,PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->bindParam(':value',$data);
$query = "UPDATE $tbname SET [BitCol]=:Name WHERE [CharCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':Name', $noteID, PDO::PARAM_STR);
$stmt->bindParam(':value', $data);
$stmt->execute();
$select = "SELECT * FROM PDO_AllTypes WHERE [CharCol]=:value";
$stmt = $db->prepare($select,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data);
$select = "SELECT * FROM $tbname WHERE [CharCol]=:value";
$stmt = $db->prepare($select, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data);
$stmt->execute();
$result = $stmt->fetchColumn(2); // Retrieve BitCol
$result = str_replace("\0","",$result);
unset($stmt);
$result = str_replace("\0", "", $result);
print("$result\n");
}
function bindParam_NULL($db)
function bindPARAM_NULL($db, $tbname)
{
// Binding NULL with buffered queries activated.
$noteID = fopen('php://memory', 'a');
$data = 'STRINGCOL2';
$query = "UPDATE PDO_AllTypes SET [BitCol]=:Name WHERE [VarcharCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
fwrite($noteID, null);
rewind($noteID);
$stmt->bindParam(':Name',$noteID,PDO::PARAM_NULL);
$stmt->bindParam(':value',$data);
$stmt->bindParam(':Name', $noteID, PDO::PARAM_NULL);
$stmt->bindParam(':value', $data);
$stmt->execute();
$data = '0';
$select = "SELECT * FROM PDO_AllTypes WHERE [BitCol]=:value";
$stmt = $db->prepare($select,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data);
$stmt = $db->prepare($select, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data);
$stmt->execute();
$result = $stmt->fetchColumn(2); // Retrieve BitCol
$result = str_replace("\0","",$result);
unset($stmt);
$result = str_replace("\0", "", $result);
print("$result\n");
}
function bindParam_INT($db)
function bindPARAM_INT($db, $tbname)
{
// Binding INT with buffered queries activated.
$noteID = fopen('php://memory', 'a');
$data = 0;
$query = "UPDATE PDO_ALLTypes SET [IntCol]=:Name WHERE [IntCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$query = "UPDATE $tbname SET [IntCol]=:Name WHERE [IntCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
fwrite($noteID, '1');
rewind($noteID);
$stmt->bindParam(':Name',$noteID,PDO::PARAM_INT);
$stmt->bindParam(':value',$data);
$stmt->bindParam(':Name', $noteID, PDO::PARAM_INT);
$stmt->bindParam(':value', $data);
$stmt->execute();
$select = "SELECT * FROM PDO_AllTypes WHERE [BigIntCol]=:value";
$stmt = $db->prepare($select,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data,PDO::PARAM_INT);
$select = "SELECT * FROM $tbname WHERE [BigIntCol]=:value";
$stmt = $db->prepare($select, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data, PDO::PARAM_INT);
$stmt->execute();
$result = $stmt->fetchColumn(11); // Retrieve IntCol
$result = str_replace("\0","",$result);
unset($stmt);
$result = str_replace("\0", "", $result);
print("$result\n");
}
function bindParam_BOOL($db)
function bindPARAM_BOOL($db, $tbname)
{
// Binding BOOL with buffered queries activated.
$noteID = fopen('php://memory', 'a');
$data = '0';
$query = "UPDATE PDO_AllTypes SET [BitCol]=:Name WHERE [BigIntCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$query = "UPDATE $tbname SET [BitCol]=:Name WHERE [BigIntCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
fwrite($noteID, '1');
rewind($noteID);
$stmt->bindParam(':Name',$noteID,PDO::PARAM_BOOL);
$stmt->bindParam(':value',$data);
$stmt->bindParam(':Name', $noteID, PDO::PARAM_BOOL);
$stmt->bindParam(':value', $data);
$stmt->execute();
$query = "SELECT * FROM PDO_AllTypes WHERE [BigIntCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data,PDO::PARAM_BOOL);
$query = "SELECT * FROM $tbname WHERE [BigIntCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data, PDO::PARAM_BOOL);
$stmt->execute();
$result = $stmt->fetchColumn(2); // Retrieve BitCol
$result = str_replace("\0","",$result);
unset($stmt);
$result = str_replace("\0", "", $result);
print("$result\n");
}
function delete($db)
function delete($db, $tbname)
{
$data = "STRINGCOL2";
$query = "DELETE FROM PDO_AllTypes WHERE [CharCol]=:value";
$stmt = $db->prepare($query,array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value',$data);
$query = "DELETE FROM $tbname WHERE [CharCol]=:value";
$stmt = $db->prepare($query, array(PDO::ATTR_CURSOR=>PDO::CURSOR_SCROLL, PDO::SQLSRV_ATTR_CURSOR_SCROLL_TYPE=>PDO::SQLSRV_CURSOR_BUFFERED));
$stmt->bindParam(':value', $data);
$stmt->execute();
unset($stmt);
}
try {
$db = connect();
insert($db);
bindParam_LOB($db);
bindParam_STR($db);
bindParam_NULL($db);
bindParam_INT($db);
bindParam_BOOL($db);
delete($db);
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
insert($db, $tbname);
bindPARAM_LOB($db, $tbname);
bindPARAM_STR($db, $tbname);
bindPARAM_NULL($db, $tbname);
bindPARAM_INT($db, $tbname);
bindPARAM_BOOL($db, $tbname);
delete($db, $tbname);
dropTable($db, $tbname);
unset($db);
echo "Test Completed";
}
catch( PDOException $e ) {
var_dump( $e );
} catch (PDOException $e) {
var_dump($e);
exit;
}

View file

@ -1,305 +1,302 @@
--TEST--
Test the different type of data for retrieving
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
function testBigInt($db)
function testBigInt($db, $tbname)
{
$stmt = $db->query("SELECT BigIntCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT BigIntCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testBit($db)
function testBit($db, $tbname)
{
$stmt = $db->query("SELECT BitCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT BitCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testInt($db)
function testInt($db, $tbname)
{
$stmt = $db->query("SELECT IntCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT IntCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testSmallInt($db)
function testSmallInt($db, $tbname)
{
$stmt = $db->query("SELECT SmallIntCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT SmallIntCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testTinyInt($db)
function testTinyInt($db, $tbname)
{
$stmt = $db->query("SELECT TinyIntCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT TinyIntCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDecimal($db)
function testDecimal($db, $tbname)
{
$stmt = $db->query("SELECT DecimalCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT DecimalCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNumeric($db)
function testNumeric($db, $tbname)
{
$stmt = $db->query("SELECT NumCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT NumCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testMoney($db)
function testMoney($db, $tbname)
{
$stmt = $db->query("SELECT MoneyCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT MoneyCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testSmallMoney($db)
function testSmallMoney($db, $tbname)
{
$stmt = $db->query("SELECT SmallMoneyCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT SmallMoneyCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testFloat($db)
function testFloat($db, $tbname)
{
$stmt = $db->query("SELECT FloatCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT FloatCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testReal($db)
function testReal($db, $tbname)
{
$stmt = $db->query("SELECT RealCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT RealCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testChar($db)
function testChar($db, $tbname)
{
$stmt = $db->query("SELECT CharCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT CharCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarchar($db)
function testVarchar($db, $tbname)
{
$stmt = $db->query("SELECT VarcharCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT VarcharCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testText($db)
function testText($db, $tbname)
{
$stmt = $db->query("SELECT TextCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT TextCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNText($db)
function testNText($db, $tbname)
{
$stmt = $db->query("SELECT NTextCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT NTextCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNChar($db)
function testNChar($db, $tbname)
{
$stmt = $db->query("SELECT NCharCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT NCharCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNVarchar($db)
function testNVarchar($db, $tbname)
{
$stmt = $db->query("SELECT NVarcharCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT NVarcharCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testImage($db)
function testImage($db, $tbname)
{
$stmt = $db->query("SELECT ImageCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT ImageCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testBinary($db)
function testBinary($db, $tbname)
{
$stmt = $db->query("SELECT BinaryCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT BinaryCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarbinary($db)
function testVarbinary($db, $tbname)
{
$stmt = $db->query("SELECT VarbinaryCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT VarbinaryCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDateTime2($db)
function testDateTime2($db, $tbname)
{
$stmt = $db->query("SELECT DateTime2Col FROM PDO_AllTypes");
$stmt = $db->query("SELECT DateTime2Col FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDatetimeoffset($db)
function testDatetimeoffset($db, $tbname)
{
$stmt = $db->query("SELECT DTOffsetCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT DTOffsetCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testsmalldatetime($db)
function testsmalldatetime($db, $tbname)
{
$stmt = $db->query("SELECT SmallDTCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT SmallDTCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDateTime($db)
function testDateTime($db, $tbname)
{
$stmt = $db->query("SELECT DateTimeCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT DateTimeCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testDate($db)
function testDate($db, $tbname)
{
$stmt = $db->query("SELECT DateCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT DateCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testNVarcharMax($db)
function testNVarcharMax($db, $tbname)
{
$stmt = $db->query("SELECT NVarCharMaxCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT NVarCharMaxCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testTime($db)
function testTime($db, $tbname)
{
$stmt = $db->query("SELECT TimeCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT TimeCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testUniqueidentifier($db)
function testUniqueidentifier($db, $tbname)
{
$stmt = $db->query("SELECT Guidcol FROM PDO_AllTypes");
$stmt = $db->query("SELECT Guidcol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarbinaryMax($db)
function testVarbinaryMax($db, $tbname)
{
$stmt = $db->query("SELECT VarbinaryMaxCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT VarbinaryMaxCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testVarcharMax($db)
function testVarcharMax($db, $tbname)
{
$stmt = $db->query("SELECT VarcharMaxCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT VarcharMaxCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
function testXml($db)
function testXml($db, $tbname)
{
$stmt = $db->query("SELECT XmlCol FROM PDO_AllTypes");
$stmt = $db->query("SELECT XmlCol FROM $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
}
try
{
try {
$db = connect();
//$sql = "INSERT INTO PDO_AllTypes(BigIntCol,BitCol,IntCol,) VALUES(" . GetSampleData(4) . ",1,)";
//$numRows = $db->exec($sql);
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
echo "Test_1 : bigint data type :\n";
testBigInt($db);
testBigInt($db, $tbname);
echo "Test_2 : bit data type :\n";
testBit($db);
testBit($db, $tbname);
echo "Test_3 : int data type :\n";
testInt($db);
testInt($db, $tbname);
echo "Test_4 : smallint data type:\n";
testSmallInt($db);
testSmallInt($db, $tbname);
echo "Test_5 : tinyint data type:\n";
testTinyInt($db);
testTinyInt($db, $tbname);
echo "Test_6 : decimal data type:\n";
testDecimal($db);
testDecimal($db, $tbname);
echo "Test_7 : numeric data type:\n";
testNumeric($db);
testNumeric($db, $tbname);
echo "Test_8 : money data type:\n";
testMoney($db);
testMoney($db, $tbname);
echo "Test_9 : smallmoney data type:\n";
testSmallMoney($db);
testSmallMoney($db, $tbname);
echo "Test_10 : float data type:\n";
testFloat($db);
testFloat($db, $tbname);
echo "Test_11 : real data type:\n";
testReal($db);
testReal($db, $tbname);
echo "Test_12 : char data type:\n";
testChar($db);
testChar($db, $tbname);
echo "Test_13 : varchar data type:\n";
testVarchar($db);
testVarchar($db, $tbname);
echo "Test_14 : text data type:\n";
testText($db);
testText($db, $tbname);
echo "Test_15 : nchar data type:\n";
testNChar($db);
testNChar($db, $tbname);
echo "Test_16 : nvarchar data type:\n";
testNVarchar($db);
testNVarchar($db, $tbname);
echo "Test_17 : image data type:\n";
testImage($db);
testImage($db, $tbname);
echo "Test_18 : binary data type:\n";
testBinary($db);
testBinary($db, $tbname);
echo "Test_19 : varbinary data type:\n";
testVarbinary($db);
testVarbinary($db, $tbname);
echo "Test_20 : smalldatetime data type:\n";
testsmalldatetime($db);
testsmalldatetime($db, $tbname);
echo "Test_21 : datetime data type:\n";
testDateTime($db);
testDateTime($db, $tbname);
echo "Test_22 : datetime2 data type:\n";
testsmalldatetime($db);
testsmalldatetime($db, $tbname);
echo "Test_23 : datetimeoffset data type:\n";
testDatetimeoffset($db);
testDatetimeoffset($db, $tbname);
echo "Test_24 : time data type:\n";
testTime($db);
testTime($db, $tbname);
echo "Test_25 : Uniqueidentifier data type:\n";
testUniqueidentifier($db);
testUniqueidentifier($db, $tbname);
echo "Test_26 : VarbinaryMax data type:\n";
testVarbinaryMax($db);
testVarbinaryMax($db, $tbname);
echo "Test_27 : VarcharMax data type:\n";
testVarcharMax($db);
testVarcharMax($db, $tbname);
echo "Test_28 : xml data type:\n";
testXml($db);
testXml($db, $tbname);
echo "Test_29 : ntext data type:\n";
testNText($db);
testNText($db, $tbname);
echo "Test_30 : nvarcharmax data type:\n";
testNVarcharMax($db);
testNVarcharMax($db, $tbname);
echo "Test_31 : date data type:\n";
testDate($db);
}
catch (PDOException $e)
{
testDate($db, $tbname);
dropTable($db, $tbname);
unset($db);
} catch (PDOException $e) {
var_dump($e);
}
?>
--EXPECT--
@ -386,17 +383,17 @@ array(1) {
Test_17 : image data type:
array(1) {
["ImageCol"]=>
string(1) ""
string(0) ""
}
Test_18 : binary data type:
array(1) {
["BinaryCol"]=>
string(5) ""
string(5) "00"
}
Test_19 : varbinary data type:
array(1) {
["VarbinaryCol"]=>
string(1) ""
string(0) ""
}
Test_20 : smalldatetime data type:
array(1) {
@ -431,7 +428,7 @@ array(1) {
Test_26 : VarbinaryMax data type:
array(1) {
["VarbinaryMaxCol"]=>
string(1) ""
string(0) ""
}
Test_27 : VarcharMax data type:
array(1) {

View file

@ -1,53 +1,50 @@
--TEST--
Test the bindColumn method using either by bind by column number or bind by column name
--SKIPIF--
<?php require "skipif.inc"; ?>
<?php require "skipif_mid-refactor.inc"; ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once "MsCommon.inc";
function bindColumn_byName($db)
function bindColumn_byName($db, $tbname)
{
global $table1;
$stmt = $db->prepare("SELECT IntCol, CharCol, DateTimeCol FROM " . $table1);
$stmt = $db->prepare("SELECT IntCol, CharCol, DateTimeCol FROM $tbname");
$stmt->execute();
$stmt->bindColumn('IntCol', $intCol);
$stmt->bindColumn('CharCol', $charCol);
$stmt->bindColumn('DateTimeCol', $dateTimeCol);
while($row = $stmt->fetch(PDO::FETCH_BOUND))
{
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
echo $intCol . " : " . $charCol . " : " . $dateTimeCol . "\n";
}
}
function bindColumn_byNumber($db)
function bindColumn_byNumber($db, $tbname)
{
global $table1;
$stmt = $db->prepare("SELECT IntCol, CharCol, DateTimeCol FROM " . $table1);
$stmt = $db->prepare("SELECT IntCol, CharCol, DateTimeCol FROM $tbname");
$stmt->execute();
$stmt->bindColumn(1, $intCol);
$stmt->bindColumn(2, $charCol);
$stmt->bindColumn(3, $dateTimeCol);
while($row = $stmt->fetch(PDO::FETCH_BOUND))
{
while ($row = $stmt->fetch(PDO::FETCH_BOUND)) {
echo $intCol . " : " . $charCol . " : " . $dateTimeCol . "\n";
}
}
try
{
try {
$db = connect();
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
echo "Bind Column by name :\n";
bindColumn_byName($db);
bindColumn_byName($db, $tbname);
echo "Bind Column by number :\n";
bindColumn_byNumber($db);
bindColumn_byNumber($db, $tbname);
}
catch (PDOException $e)
{
dropTable($db, $tbname);
unset($db);
} catch (PDOException $e) {
var_dump($e);
}

View file

@ -1,7 +1,7 @@
--TEST--
PDOStatement::BindParam for NULL types and for value types.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
@ -23,141 +23,134 @@ PDOStatement::BindParam for NULL types and for value types.
//*************************************************************************************
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
function bind_params_with_null($db)
function bindParamsWithNull($db, $tbname)
{
global $table2;
$sql = " INSERT INTO " .$table2 . "
([BigIntCol]
,[BinaryCol]
,[BitCol]
,[CharCol]
,[DateCol]
,[DateTimeCol]
,[DateTime2Col]
,[DTOffsetCol]
,[DecimalCol]
,[FloatCol]
,[ImageCol]
,[IntCol]
,[MoneyCol]
,[NCharCol]
,[NTextCol]
,[NumCol]
,[NVarCharCol]
,[NVarCharMaxCol]
,[RealCol]
,[SmallDTCol]
,[SmallIntCol]
,[SmallMoneyCol]
,[TextCol]
,[TimeCol]
,[TinyIntCol]
,[Guidcol]
,[VarbinaryCol]
,[VarbinaryMaxCol]
,[VarcharCol]
,[VarcharMaxCol]
,[XmlCol])
$sql = "INSERT INTO $tbname
([BigIntCol],
[BinaryCol],
[BitCol],
[CharCol],
[DateCol],
[DateTimeCol],
[DateTime2Col],
[DTOffsetCol],
[DecimalCol],
[FloatCol],
[ImageCol],
[IntCol],
[MoneyCol],
[NCharCol],
[NTextCol],
[NumCol],
[NVarCharCol],
[NVarCharMaxCol],
[RealCol],
[SmallDTCol],
[SmallIntCol],
[SmallMoneyCol],
[TextCol],
[TimeCol],
[TinyIntCol],
[Guidcol],
[VarbinaryCol],
[VarbinaryMaxCol],
[VarcharCol],
[VarcharMaxCol],
[XmlCol])
VALUES (?,?,?,?,?,?,?,?,?,? /*10*/,?,?,?,?,?,?,?,?,?,? /*20*/, ?,?,?,?,?,?,?,?,?,?, ? /*31*/)";
$stmt = $db->prepare($sql);
$param = null;
$stmt->bindParam(1, $param);
$stmt->bindParam(2, $param, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY );
$stmt->bindParam(3, $param );
$stmt->bindParam(4, $param );
$stmt->bindParam(5, $param );
$stmt->bindParam(6, $param );
$stmt->bindParam(7, $param );
$stmt->bindParam(8, $param );
$stmt->bindParam(9, $param );
$stmt->bindParam(10, $param );
$stmt->bindParam(11, $param );
$stmt->bindParam(12, $param );
$stmt->bindParam(13, $param );
$stmt->bindParam(14, $param );
$stmt->bindParam(15, $param );
$stmt->bindParam(16, $param );
$stmt->bindParam(17, $param );
$stmt->bindParam(18, $param );
$stmt->bindParam(19, $param );
$stmt->bindParam(20, $param );
$stmt->bindParam(21, $param );
$stmt->bindParam(22, $param );
$stmt->bindParam(23, $param );
$stmt->bindParam(24, $param );
$stmt->bindParam(25, $param );
$stmt->bindParam(26, $param );
$stmt->bindParam(27, $param, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY ); //PDO::PARAM_STR OR PDO::PARAM_LOB DOES NOT MATTER
$stmt->bindParam(28, $param, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY );
$stmt->bindParam(29, $param );
$stmt->bindParam(30, $param );
$stmt->bindParam(31, $param );
$stmt->bindParam(2, $param, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->bindParam(3, $param);
$stmt->bindParam(4, $param);
$stmt->bindParam(5, $param);
$stmt->bindParam(6, $param);
$stmt->bindParam(7, $param);
$stmt->bindParam(8, $param);
$stmt->bindParam(9, $param);
$stmt->bindParam(10, $param);
$stmt->bindParam(11, $param);
$stmt->bindParam(12, $param);
$stmt->bindParam(13, $param);
$stmt->bindParam(14, $param);
$stmt->bindParam(15, $param);
$stmt->bindParam(16, $param);
$stmt->bindParam(17, $param);
$stmt->bindParam(18, $param);
$stmt->bindParam(19, $param);
$stmt->bindParam(20, $param);
$stmt->bindParam(21, $param);
$stmt->bindParam(22, $param);
$stmt->bindParam(23, $param);
$stmt->bindParam(24, $param);
$stmt->bindParam(25, $param);
$stmt->bindParam(26, $param);
$stmt->bindParam(27, $param, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY); //PDO::PARAM_STR OR PDO::PARAM_LOB DOES NOT MATTER
$stmt->bindParam(28, $param, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->bindParam(29, $param);
$stmt->bindParam(30, $param);
$stmt->bindParam(31, $param);
$stmt->execute();
}
function bind_params_int($db)
function bindParamsInt($db, $tbname)
{
global $table2;
$stmt = $db->prepare("SELECT * FROM " . $table2 . " WHERE BigIntCol = :bigIntCol ");
$stmt = $db->prepare("SELECT * FROM $tbname WHERE BigIntCol = :bigIntCol");
$int = 1;
$stmt->bindParam(":bigIntCol", $int, PDO::PARAM_INT);
$stmt->execute();
}
function bind_params_str($db)
function bindParamsStr($db, $tbname)
{
global $table2;
$stmt = $db->prepare("SELECT * FROM " . $table2 . " WHERE CharCol = :charCol ");
$stmt = $db->prepare("SELECT * FROM $tbname WHERE CharCol = :charCol");
$char = "STRINGCOL1";
$stmt->bindParam(":charCol", $char, PDO::PARAM_STR);
$stmt->execute();
}
function bind_params_bool($db)
function bindParamsBool($db, $tbname)
{
global $table2;
$stmt = $db->prepare("SELECT * FROM " . $table2 . " WHERE BitCol = :bool ");
$stmt = $db->prepare("SELECT * FROM " . $tbname . " WHERE BitCol = :bool");
$bool = 0;
$stmt->bindParam(":bool" , $bool, PDO::PARAM_BOOL);
$stmt->bindParam(":bool", $bool, PDO::PARAM_BOOL);
$stmt->execute();
}
function bind_params_lob($db)
function bindParamsLob($db, $tbname)
{
global $table2;
$stmt = $db->prepare("SELECT * FROM " . $table2 . " WHERE BinaryCol = :lob ");
$lob = 0;
$stmt->bindParam(":lob" , $lob, PDO::PARAM_LOB);
$stmt = $db->prepare("SELECT * FROM $tbname WHERE BinaryCol = :lob");
$lob = fopen('php://memory', 'a');
fwrite($lob, '00');
rewind($lob);
$stmt->bindParam(":lob", $lob, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY);
$stmt->execute();
}
try {
$db = connect();
create_and_insert_table2( $db );
bind_params_with_null($db);
bind_params_int($db);
bind_params_str($db);
bind_params_bool($db);
bind_params_lob($db);
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
bindParamsWithNull($db, $tbname);
bindParamsInt($db, $tbname);
bindParamsStr($db, $tbname);
bindParamsBool($db, $tbname);
bindParamsLob($db, $tbname);
echo "Test Succeeded";
}
catch( PDOException $e ) {
var_dump( $e );
dropTable($db, $tbname);
unset($db);
echo "Test Succeeded\n";
} catch (PDOException $e) {
var_dump($e);
exit;
}
?>
--EXPECT--
Test Succeeded

View file

@ -1,25 +1,28 @@
--TEST--
Test bindValue method.
--SKIPIF--
<?php require "skipif.inc"; ?>
<?php require("skipif_mid-refactor.inc"); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
try{
try {
$db = connect();
global $table2;
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
$bigint = 1;
$string = "STRINGCOL1";
$stmt = $db->prepare("SELECT IntCol FROM " . $table2 . " WHERE BigIntCol = :bigint AND CharCol = :string");
$stmt = $db->prepare("SELECT IntCol FROM $tbname WHERE BigIntCol = :bigint AND CharCol = :string");
$stmt->bindValue(':bigint', $bigint, PDO::PARAM_INT);
$stmt->bindValue(':string', $string, PDO::PARAM_STR);
$stmt->execute();
dropTable($db, $tbname);
unset($stmt);
unset($db);
echo "Test Complete!\n";
}
catch (PDOException $e)
{
} catch (PDOException $e) {
var_dump($e);
}
?>

View file

@ -1,28 +1,27 @@
--TEST--
Test PDOStatement::closeCursor method.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
try{
try {
$db = connect();
global $table2;
$stmt = $db->prepare("SELECT * FROM " . $table2);
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
$stmt = $db->prepare("SELECT * FROM $tbname");
$stmt->execute();
$result = $stmt->fetch();
$stmt->closeCursor();
echo "Test complete!";
}
catch ( PDOException $e)
{
dropTable($db, $tbname);
unset($stmt);
unset($db);
echo "Test complete!\n";
} catch (PDOException $e) {
var_dump($e);
}
?>
--EXPECT--
Test complete!

View file

@ -1,24 +1,23 @@
--TEST--
Test PDOStatement::columnCount if the number of the columns in a result set.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
try
{
try {
$db = connect();
$sql = "SELECT * FROM PDO_AllTypes";
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
$sql = "SELECT * FROM $tbname";
$stmt = $db->prepare($sql);
$stmt->execute();
print_r("Existing table contains: " . $stmt->columnCount());
}
catch(PDOException $e)
{
print_r("Existing table contains: " . $stmt->columnCount() . "\n");
} catch (PDOException $e) {
var_dump($e);
}
}
?>
--EXPECT--
Existing table contains: 31

View file

@ -1,26 +1,30 @@
--TEST--
Test debugDumpParams method.
--SKIPIF--
<?php require "skipif.inc"; ?>
<?php require("skipif_mid-refactor.inc"); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once('MsCommon_mid-refactor.inc');
require_once("MsData_PDO_AllTypes.inc");
try{
try {
$db = connect();
global $table2;
$tbname = "PDO_AllTypes";
createAndInsertTableAllTypes($db, $tbname);
$bigint = 1;
$string = "STRINGCOL1";
$stmt = $db->prepare("SELECT IntCol FROM " . $table2 . " WHERE BigIntCol = :bigint AND CharCol = :string");
$stmt = $db->prepare("SELECT IntCol FROM " . $tbname . " WHERE BigIntCol = :bigint AND CharCol = :string");
$stmt->bindValue(':bigint', $bigint, PDO::PARAM_INT);
$stmt->bindValue(':string', $string, PDO::PARAM_STR);
$stmt->execute();
$stmt->debugDumpParams();
}
catch (PDOException $e)
{
dropTable($db, $tbname);
unset($stmt);
unset($db);
} catch (PDOException $e) {
var_dump($e);
}
?>

View file

@ -1,15 +1,17 @@
--TEST--
Test PDOStatement::errorInfo and PDOStatement::errorCode methods.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
try
{
try {
$db = connect();
$stmt = $db->prepare("SELECT * FROM PDO_Types_1");
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
$stmt = $db->prepare("SELECT * FROM $tbname");
$stmt->execute();
$arr = $stmt->errorInfo();
print_r("Error Info :\n");
@ -17,15 +19,12 @@ try
$arr = $stmt->errorCode();
print_r("Error Code : " . $arr . "\n");
$db = null;
}
catch (PDOException $e)
{
dropTable($db, $tbname);
unset($stmt);
unset($db);
} catch (PDOException $e) {
var_dump($e);
}
?>
--EXPECT--
Error Info :

View file

@ -1,34 +1,52 @@
--TEST--
Test PDOStatement::execute method.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once 'MsCommon.inc';
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
try
{
try {
$db = connect();
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
$stmt = $db->prepare("SELECT * FROM PDO_Types_1");
$stmt = $db->prepare("SELECT * FROM $tbname");
$stmt->execute();
$rows = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($rows);
// Test update table value
$stmt = $db->prepare("UPDATE PDO_Types_1 SET IntCol=1");
$rows = $stmt->execute();
var_dump($rows);
// Test insert value to table
$stmt1 = $db->prepare("INSERT INTO PDO_Types_1 (IntCol,CharCol,NCharCol,DateTimeCol,VarcharCol,NVarCharCol,FloatCol,XmlCol) VALUES (2,'STRINGCOL1','STRINGCOL1','2000-11-11 11:11:11.110','STRINGCOL1','STRINGCOL1',111.111,'<xml> 1 This is a really large string used to test certain large data types like xml data type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>')");
$rows = $stmt1->execute();
var_dump($rows);
$db = null;
}
catch(PDOException $e)
{
var_dump($e);
}
// Test update table value
if (isColEncrypted()) {
$stmt = $db->prepare("UPDATE $tbname SET IntCol=?");
$r = $stmt->execute(array(1));
} else {
$stmt = $db->prepare("UPDATE $tbname SET IntCol=1");
$r = $stmt->execute();
}
var_dump($r);
// Test insert value to table
$inputs = array("IntCol" => 2,
"CharCol" => 'STRINGCOL1',
"NCharCol" => 'STRINGCOL1',
"DateTimeCol" => '2000-11-11 11:11:11.110',
"VarcharCol" => 'STRINGCOL1',
"NVarCharCol" => 'STRINGCOL1',
"FloatCol" => 111.111,
"XmlCol" => '<xml> 1 This is a really large string used to test certain large data types like xml data type. The fetch tests are the primary consumer of this string to validate that fetch on large types work fine. The length of this string as counted in terms of number of characters is 417.</xml>');
$r;
$stmt1 = insertRow($db, $tbname, $inputs, "prepareExecuteBind", $r);
var_dump($r);
dropTable($db, $tbname);
unset($stmt);
unset($stmt1);
unset($conn);
} catch (PDOException $e) {
var_dump($e);
}
?>
--EXPECT--
array(8) {

View file

@ -1,17 +1,18 @@
--TEST--
Test the fetchColumn() method.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
try {
$db = connect();
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
function fetch_column( $conn )
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $db->query("Select * from $tbname");
// Fetch the first column from the next row in resultset. (This wud be first row since this is a first call to fetchcol)
$result = $stmt->fetchColumn();
@ -24,31 +25,18 @@ require_once 'MsCommon.inc';
// Test false is returned when there are no more rows.
$result = $stmt->fetchColumn(1);
var_dump($result);
}
try
{
//$verbose = false;
$db = connect();
create_and_insert_table1( $db );
fetch_column($db);
}
catch( PDOException $e ) {
var_dump( $e );
dropTable($db, $tbname);
unset($stmt);
unset($conn);
} catch (PDOException $e) {
var_dump($e);
exit;
}
?>
--EXPECT--
string(1) "1"
string(10) "STRINGCOL2"
bool(false)

View file

@ -1,62 +1,55 @@
--TEST--
Test the PDOStatement::fetch() method with different fetch styles.
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
function fetch_both( $conn )
function fetchBoth($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch(PDO::FETCH_BOTH);
var_dump($result);
$stmt->closeCursor();
}
function fetch_assoc( $conn )
function fetchAssoc($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch(PDO::FETCH_ASSOC);
var_dump($result);
$stmt->closeCursor();
}
function fetch_lazy( $conn )
function fetchLazy($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from " . $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch(PDO::FETCH_LAZY);
var_dump($result);
$stmt->closeCursor();
}
function fetch_obj( $conn )
function fetchObj($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch(PDO::FETCH_OBJ);
var_dump($result);
$stmt->closeCursor();
}
function fetch_num( $conn )
function fetchNum($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
$result = $stmt->fetch(PDO::FETCH_NUM);
var_dump($result);
$stmt->closeCursor();
}
function fetch_bound( $conn )
function fetchBound($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
$stmt->bindColumn('IntCol', $IntCol);
$stmt->bindColumn('CharCol', $CharCol);
$stmt->bindColumn('NCharCol', $NCharCol);
@ -66,8 +59,7 @@ function fetch_bound( $conn )
$stmt->bindColumn('FloatCol', $FloatCol);
$stmt->bindColumn('XmlCol', $XmlCol);
$result = $stmt->fetch(PDO::FETCH_BOUND);
if (!$result)
{
if (!$result) {
die("Error in FETCH_BOUND\n");
}
var_dump($IntCol);
@ -81,68 +73,64 @@ function fetch_bound( $conn )
$stmt->closeCursor();
}
function fetch_class( $conn )
function fetchClass($conn, $tbname)
{
global $table1;
global $table1_class;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt->setFetchMode(PDO::FETCH_CLASS, $table1_class);
global $mainTypesClass;
$stmt = $conn->query("Select * from $tbname");
$stmt->setFetchMode(PDO::FETCH_CLASS, $mainTypesClass);
$result = $stmt->fetch(PDO::FETCH_CLASS);
$result->dumpAll();
$stmt->closeCursor();
}
function fetch_into( $conn )
function fetchInto($conn, $tbname)
{
global $table1;
global $table1_class;
$stmt = $conn->query( "Select * from ". $table1 );
$obj = new $table1_class;
global $mainTypesClass;
$stmt = $conn->query("Select * from $tbname");
$obj = new $mainTypesClass;
$stmt->setFetchMode(PDO::FETCH_INTO, $obj);
$result = $stmt->fetch(PDO::FETCH_INTO);
$obj->dumpAll();
$stmt->closeCursor();
}
function fetch_invalid( $conn )
function fetchInvalid($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
try
{
$stmt = $conn->query("Select * from $tbname");
try {
$result = $stmt->fetch(PDO::FETCH_UNKNOWN);
}
catch(PDOException $err)
{
} catch (PDOException $err) {
print_r($err);
}
}
try
{
try {
$db = connect();
create_and_insert_table1( $db );
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
echo "Test_1 : FETCH_BOTH :\n";
fetch_both($db);
fetchBoth($db, $tbname);
echo "Test_2 : FETCH_ASSOC :\n";
fetch_assoc($db);
fetchAssoc($db, $tbname);
echo "Test_3 : FETCH_LAZY :\n";
fetch_lazy($db);
fetchLazy($db, $tbname);
echo "Test_4 : FETCH_OBJ :\n";
fetch_obj($db);
fetchObj($db, $tbname);
echo "Test_5 : FETCH_NUM :\n";
fetch_num($db);
fetchNum($db, $tbname);
echo "Test_6 : FETCH_BOUND :\n";
fetch_bound($db);
fetchBound($db, $tbname);
echo "Test_7 : FETCH_CLASS :\n";
fetch_class($db);
fetchClass($db, $tbname);
echo "Test_8 : FETCH_INTO :\n";
fetch_into($db);
fetchInto($db, $tbname);
echo "Test_9 : FETCH_INVALID :\n";
fetch_invalid($db);
}
catch( PDOException $e ) {
var_dump( $e );
fetchInvalid($db, $tbname);
dropTable($db, $tbname);
unset($db);
} catch (PDOException $e) {
var_dump($e);
exit;
}
@ -207,7 +195,7 @@ array(8) {
Test_3 : FETCH_LAZY :
object(PDORow)#%x (%x) {
["queryString"]=>
string(25) "Select * from PDO_Types_1"
string(27) "Select * from PDO_MainTypes"
["IntCol"]=>
string(1) "1"
["CharCol"]=>
@ -294,6 +282,6 @@ Test_9 : FETCH_INVALID :
Fatal error: Uncaught Error: Undefined class constant 'FETCH_UNKNOWN' in %s:%x
Stack trace:
#0 %s: fetch_invalid(Object(PDO))
#0 %s: fetchInvalid(Object(PDO), 'PDO_MainTypes')
#1 {main}
thrown in %s on line %x

View file

@ -1,71 +1,76 @@
--TEST--
Test the PDOStatement::getColumnMeta() method (Note: there could be an issue about using a non-existent column index --- doesn't give any error/output/warning).
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
function fetch_both( $conn )
function fetchBoth($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
// 1
$meta = $stmt->getColumnMeta( 0 );
$meta = $stmt->getColumnMeta(0);
var_dump($meta);
// 2
$meta = $stmt->getColumnMeta( 1 );
$meta = $stmt->getColumnMeta(1);
var_dump($meta);
// 3
$meta = $stmt->getColumnMeta( 2 );
$meta = $stmt->getColumnMeta(2);
var_dump($meta);
// 4
$meta = $stmt->getColumnMeta( 3 );
$meta = $stmt->getColumnMeta(3);
var_dump($meta);
// 5
$meta = $stmt->getColumnMeta( 4 );
$meta = $stmt->getColumnMeta(4);
var_dump($meta);
// 6
$meta = $stmt->getColumnMeta( 5 );
$meta = $stmt->getColumnMeta(5);
var_dump($meta);
// 7
$meta = $stmt->getColumnMeta( 6 );
$meta = $stmt->getColumnMeta(6);
var_dump($meta);
// 8
$meta = $stmt->getColumnMeta( 7 );
$meta = $stmt->getColumnMeta(7);
if (isColEncrypted()) {
$xmlType = "nvarchar";
} else {
$xmlType = "xml";
}
if ($meta["sqlsrv:decl_type"] != $xmlType) {
echo "Wrong column metadata was retrieved for a $xmlType column.\n";
}
unset($meta["sqlsrv:decl_type"]);
var_dump($meta);
// Test invalid arguments, set error mode to silent to reduce the amount of error messages generated
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
// Test negative column number, ignore the error messages
$meta = $stmt->getColumnMeta( -1 );
$meta = $stmt->getColumnMeta(-1);
var_dump($meta);
// Test non-existent column number
//$meta = $stmt->getColumnMeta( 10 );
//var_dump($meta);
$meta = $stmt->getColumnMeta(10);
var_dump($meta);
}
try
{
try {
$db = connect();
create_and_insert_table1( $db );
fetch_both($db);
}
catch( PDOException $e ) {
var_dump( $e );
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
fetchBoth($db, $tbname);
} catch (PDOException $e) {
var_dump($e);
exit;
}
@ -199,11 +204,9 @@ array(8) {
["precision"]=>
int(0)
}
array(8) {
array(7) {
["flags"]=>
int(0)
["sqlsrv:decl_type"]=>
string(3) "xml"
["native_type"]=>
string(6) "string"
["table"]=>
@ -220,3 +223,5 @@ array(8) {
Warning: PDOStatement::getColumnMeta(): SQLSTATE[42P10]: Invalid column reference: column number must be non-negative in %s on line %x
bool(false)
Fatal error: pdo_sqlsrv_stmt_get_col_meta: invalid column number. in %s on line %x

View file

@ -1,123 +1,114 @@
--TEST--
Test the PDOStatement::getColumnMeta() method for Unicode column names (Note: there could be an issue about using a non-existent column index --- doesn't give any error/output/warning).
--SKIPIF--
<?php require('skipif.inc'); ?>
<?php require('skipif_mid-refactor.inc'); ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
function fetch_both( $conn )
function fetchBoth($conn, $tbname)
{
global $table1;
$stmt = $conn->query( "Select * from ". $table1 );
$stmt = $conn->query("Select * from $tbname");
// 1
$meta = $stmt->getColumnMeta( 0 );
$meta = $stmt->getColumnMeta(0);
var_dump($meta);
// 2
$meta = $stmt->getColumnMeta( 1 );
$meta = $stmt->getColumnMeta(1);
var_dump($meta);
// 3
$meta = $stmt->getColumnMeta( 2 );
$meta = $stmt->getColumnMeta(2);
var_dump($meta);
// 4
$meta = $stmt->getColumnMeta( 3 );
$meta = $stmt->getColumnMeta(3);
var_dump($meta);
// 5
$meta = $stmt->getColumnMeta( 4 );
$meta = $stmt->getColumnMeta(4);
var_dump($meta);
// 6
$meta = $stmt->getColumnMeta( 5 );
$meta = $stmt->getColumnMeta(5);
var_dump($meta);
// 7
$meta = $stmt->getColumnMeta( 6 );
$meta = $stmt->getColumnMeta(6);
var_dump($meta);
// 8
$meta = $stmt->getColumnMeta( 7 );
$meta = $stmt->getColumnMeta(7);
if (isColEncrypted()) {
$xmlType = "nvarchar";
} else {
$xmlType = "xml";
}
if ($meta["sqlsrv:decl_type"] != $xmlType) {
echo "Wrong column metadata was retrieved for a $xmlType column.\n";
}
unset($meta["sqlsrv:decl_type"]);
var_dump($meta);
// Test invalid arguments, set error mode to silent to reduce the amount of error messages generated
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
// Test negative column number, ignore the error messages
$meta = $stmt->getColumnMeta( -1 );
$meta = $stmt->getColumnMeta(-1);
var_dump($meta);
// Test non-existent column number
//$meta = $stmt->getColumnMeta( 10 );
//var_dump($meta);
$meta = $stmt->getColumnMeta(10);
var_dump($meta);
}
function create_and_insert_table_unicode( $conn )
function createAndInsertTableUnicode($conn, $tbname)
{
global $string_col, $date_col, $large_string_col, $xml_col, $binary_col, $int_col, $decimal_col, $guid_col, $null_col, $comma, $closing_brace, $table1;
try
{
$create_query =
"IF EXISTS (SELECT * FROM sys.objects WHERE object_id = OBJECT_ID(N'" . $table1 . "') AND type in (N'U'))
DROP TABLE " . $table1 .
" CREATE TABLE [dbo].[" . $table1 . "](
[此是後話] [int] NULL,
[Κοντάוְאַתָּה第] [char](10) NULL,
[NΚοντάוְאַתָּה第] [nchar](10) NULL,
[ნომინავიiałopioБун] [datetime] NULL,
[VarcharCol] [varchar](50) NULL,
[NVarΚοντάוְאַתָּה第] [nvarchar](50) NULL,
[FloatCol] [float] NULL,
[XmlCol] [xml] NULL
) ON [PRIMARY]
";
$conn->query( $create_query );
for ($i = 0 ; $i <= 1; ++ $i)
{
$insert_query =
"INSERT INTO PDO_Types_1 VALUES (".
$int_col[$i] . $comma .
$string_col[$i] . $comma .
$string_col[$i] . $comma .
"Convert(datetime, ". $date_col[$i] . ")" . $comma .
$string_col[$i] . $comma .
$string_col[$i] . $comma .
$decimal_col[$i] . $comma .
$xml_col[$i] .
")";
$conn->query ( $insert_query );
try {
global $string_col, $xml_col, $int_col, $decimal_col, $datetime_col;
if (isColEncrypted()) {
$xmlType = "nvarchar(max)";
} else {
$xmlType = "xml";
}
$columnMetaArr = array("此是後話" => "int",
"Κοντάוְאַתָּה第" => "char(10)",
"NΚοντάוְאַתָּה第" => "nchar(10)",
"ნომინავიiałopioБун" => "datetime",
"VarcharCol" => "varchar(50)",
"NVarΚοντάוְאַתָּה第" => "nvarchar(50)",
"FloatCol" => "float",
"XmlCol" => $xmlType);
createTable($conn, $tbname, $columnMetaArr, "ON [PRIMARY]");
for ($i = 0 ; $i <= 1; ++ $i) {
$inputs = array("此是後話" => $int_col[$i],
"Κοντάוְאַתָּה第" => $string_col[$i],
"NΚοντάוְאַתָּה第" => $string_col[$i],
"ნომინავიiałopioБун" => $datetime_col[$i],
"VarcharCol" => $string_col[$i],
"NVarΚοντάוְאַתָּה第" => $string_col[$i],
"FloatCol" => $decimal_col[$i],
"XmlCol" => $xml_col[$i]);
$stmt = insertRow($conn, $tbname, $inputs, "prepareBindParam");
}
catch(Exception $e)
{
var_dump( $e);
} catch (Exception $e) {
var_dump($e);
exit;
}
}
try
{
try {
$db = connect();
create_and_insert_table_unicode( $db );
fetch_both($db);
}
catch( PDOException $e ) {
var_dump( $e );
$tbname = "PDO_MainTypes";
createAndInsertTableUnicode($db, $tbname);
fetchBoth($db, $tbname);
} catch (PDOException $e) {
var_dump($e);
exit;
}
?>
--EXPECTF--
@ -247,11 +238,9 @@ array(8) {
["precision"]=>
int(0)
}
array(8) {
array(7) {
["flags"]=>
int(0)
["sqlsrv:decl_type"]=>
string(3) "xml"
["native_type"]=>
string(6) "string"
["table"]=>
@ -268,3 +257,5 @@ array(8) {
Warning: PDOStatement::getColumnMeta(): SQLSTATE[42P10]: Invalid column reference: column number must be non-negative in %s on line %x
bool(false)
Fatal error: pdo_sqlsrv_stmt_get_col_meta: invalid column number. in %s on line %x

View file

@ -1,42 +1,42 @@
--TEST--
Test setFetchMode method.
--SKIPIF--
<?php require 'skipif.inc'; ?>
<?php require 'skipif_mid-refactor.inc'; ?>
--FILE--
<?php
require_once("MsCommon_mid-refactor.inc");
require_once("MsData_PDO_AllTypes.inc");
require_once 'MsCommon.inc';
try{
try {
$db = connect();
$stmt = $db->query("SELECT * FROM " . $table1 );
echo "Set Fetch Mode for PDO::FETCH_ASSOC \n";
$tbname = "PDO_MainTypes";
createAndInsertTableMainTypes($db, $tbname);
$stmt = $db->query("SELECT * FROM $tbname");
echo "Set Fetch Mode for PDO::FETCH_ASSOC\n";
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$result = $stmt->fetch();
var_dump($result);
$stmt = $db->query("SELECT * FROM " . $table1 );
echo "Set Fetch Mode for PDO::FETCH_NUM \n";
$stmt = $db->query("SELECT * FROM $tbname");
echo "Set Fetch Mode for PDO::FETCH_NUM\n";
$stmt->setFetchMode(PDO::FETCH_NUM);
$result = $stmt->fetch();
var_dump($result);
$stmt = $db->query("SELECT * FROM " . $table1 );
echo "Set Fetch Mode for PDO::FETCH_BOTH \n";
$stmt = $db->query("SELECT * FROM $tbname");
echo "Set Fetch Mode for PDO::FETCH_BOTH\n";
$stmt->setFetchMode(PDO::FETCH_BOTH);
$result = $stmt->fetch();
var_dump($result);
$stmt = $db->query("SELECT * FROM " . $table1 );
echo "Set Fetch Mode for PDO::FETCH_LAZY \n";
$stmt = $db->query("SELECT * FROM $tbname");
echo "Set Fetch Mode for PDO::FETCH_LAZY\n";
$stmt->setFetchMode(PDO::FETCH_LAZY);
$result = $stmt->fetch();
var_dump($result);
$stmt = $db->query("SELECT * FROM " . $table1 );
echo "Set Fetch Mode for PDO::FETCH_OBJ \n";
$stmt = $db->query("SELECT * FROM $tbname");
echo "Set Fetch Mode for PDO::FETCH_OBJ\n";
$stmt->setFetchMode(PDO::FETCH_OBJ);
$result = $stmt->fetch();
var_dump($result);
}
catch ( PDOException $e)
{
} catch (PDOException $e) {
var_dump($e);
}
@ -118,7 +118,7 @@ array(16) {
Set Fetch Mode for PDO::FETCH_LAZY
object(PDORow)#3 (9) {
["queryString"]=>
string(25) "SELECT * FROM PDO_Types_1"
string(27) "SELECT * FROM PDO_MainTypes"
["IntCol"]=>
string(1) "1"
["CharCol"]=>