added sqlsrv tests

This commit is contained in:
Hadis Kakanejadi Fard 2017-05-15 14:34:43 -07:00
parent 5d4ca446fc
commit 4ceabd69f3
6 changed files with 892 additions and 2 deletions

View file

@ -30,11 +30,9 @@ if (isset($_ENV['MSSQL_SERVER']) || isset($_ENV['MSSQL_USER']) || isset($_ENV['M
$uid = $_ENV['MSSQL_USER'];
$pwd = $_ENV['MSSQL_PASSWORD'];
$databaseName = $_ENV['MSSQL_DATABASE_NAME'];
$DriverName = $_ENV['MSSQL_DRIVER_NAME'];
} else {
$uid = $userName;
$pwd = $userPassword;
$databaseName = $database;
$DriverName = "ODBC Driver 11 for SQL Server";
}
?>

View file

@ -0,0 +1,181 @@
--TEST--
Test parameterized insert and fetch sql_variants as strings using various data types
--DESCRIPTION--
The following lists the types of values that can not be stored by using sql_variant:
varchar(max) / nvarchar(max)
varbinary(max)
xml
text / ntext / image
rowversion (timestamp)
sql_variant
geography
hierarchyid
geometry
datetimeoffset
User-defined types
--FILE--
<?php
include 'tools.inc';
function CreateTable($conn, $tableName)
{
$stmt = sqlsrv_query($conn, "CREATE TABLE [$tableName] ([c1_int] sql_variant, [c2_tinyint] sql_variant, [c3_smallint] sql_variant, [c4_bigint] sql_variant, [c5_bit] sql_variant, [c6_float] sql_variant, [c7_real] sql_variant, [c8_decimal] sql_variant, [c9_numeric] sql_variant, [c10_money] sql_variant, [c11_smallmoney] sql_variant, [c12_char] sql_variant, [c13_varchar] sql_variant, [c14_uniqueidentifier] sql_variant, [c15_datetime] sql_variant, [c16_smalldatetime] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
}
function InsertData($conn, $tableName, $index)
{
$data = GetInputData($index, $tableName);
$stmt = sqlsrv_query($conn, "INSERT INTO [$tableName] (c1_int, c2_tinyint, c3_smallint, c4_bigint, c5_bit, c6_float, c7_real, c8_decimal, c9_numeric, c10_money, c11_smallmoney, c12_char, c13_varchar, c14_uniqueidentifier, c15_datetime, c16_smalldatetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $data);
if (! $stmt)
FatalError("Failed to insert row $index.\n");
}
function FetchData($conn, $tableName, $numRows)
{
$select = "SELECT * FROM $tableName ORDER BY c1_int";
$stmt = sqlsrv_query($conn, $select);
$stmt2 = sqlsrv_query($conn, $select);
$metadata = sqlsrv_field_metadata($stmt);
$numFields = count($metadata);
$noActualRows = ReadData($stmt, $stmt2, $numFields);
echo "Number of rows fetched: $noActualRows\n";
if ($noActualRows != $numRows)
{
echo "Number of Actual Rows $noActualRows is unexpected!\n";
}
}
function ReadData($stmt, $stmt2, $numFields)
{
$fetched = 0;
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC))
{
$size = sizeof($row);
if ($size != $numFields)
FatalError("Array size $size returned different from expected, $numFields\n");
echo "Comparing data in row " . ++$fetched . "\n";
$obj = sqlsrv_fetch_object($stmt2);
if (! $obj)
FatalError("Failed to retrieve row $fetched!\n");
$fld = 0;
DoValuesMatched($obj->c1_int, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c2_tinyint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c3_smallint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c4_bigint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c5_bit, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c6_float, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c7_real, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c8_decimal, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c9_numeric, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c10_money, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c11_smallmoney, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c12_char, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c13_varchar, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c14_uniqueidentifier, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c15_datetime, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c16_smalldatetime, $row[$fld], $fetched, $fld++);
}
// returns the number of rows fetched
return $fetched;
}
function DoValuesMatched($value1, $value2, $row, $col)
{
$matched = false;
if (is_null($value1) && is_null($value2))
{
$matched = true;
}
else if (is_numeric($value1))
{
$matched = CompareNumericData($value1, $value2);
}
else
{
if (! strcasecmp($value1, $value2))
$matched = true;
}
if (! $matched)
{
echo "Values from row $row and column $col do not matched\n";
echo "One is $value1 but the other is $value2\n";
}
}
function GetInputData($index)
{
switch ($index)
{
case 1:
return array(array(1, null, null, null), array(167, null, null, null), array(-28589, null, null, null), array(-1991578776, null, null, null), array(0, null, null, null), array(1, null, null, null), array(0, null, null, null), array(0.0979, null, null, null), array(0.3095, null, null, null), array(0.8224, null, null, null), array(0.6794, null, null, null), array('~<auu*,/Öb£bbör,Aåbßå©+b_ãä¢ä*b<C.Ä/v£*,Buzößý~:ZÜb/Üå£îBðÃ.>Ö~.üoö©UßB.|ÃÄ£*/v|U/*bZ£ÄUÜß*+ööî*©ðü©bðr@éåbOý|©©hob/>Cz<Äå::Ð<¢ß+ü/:ª@zrß.¢Ü£bÜU©ÃßÜßðoß©r*bÜböOUvãahub£ãäªb>_ã£BOÜA©ãü/ߢß.ov:Ö<:_+uÜC:£oöü*BzC,Äö~Zî@/Z/r@/©<~.ã¢Aa</*bz.@åýBÄZÃA:zå<~öBbß|ªaýÃ,~><vBîv¢>ü>ý_zz@rÖ¢aU@,ABð/¢ß>z/ã@/ªUA~CoÄ,>bö|Ö>A,v+©CbC/Oo>©ßa©boAîÐvOo>ã|Cåöo+ÃhÖBAbo,+<ßã/£@å+ßAÜ@äÖÜOBäß~öu<aßß_bð¢ýý£_U:*Öä*©Übð,ãß,üððr+ß/U*ã¢ãüß:rAÜåz>*ã+a<îoo|¢üýoBaÃÜ£ãCaC@ha,äzäî¢ü@å£b~råîUbßr©ãßÐ:@UhAO>u*uýBbäZ£aý>v:ðC~ÜöåðzZ>O|Cä+£>öz./Ö+uÜ', null, null, null), array(',ßhr©+|v@,Ã+BZ|îAÐß_öýða_AoäAOÜ*ýC@hoBßßaä+ýöCäAä_Ä¢/Uî.äC©¢rÃuz¢*,ýß.Ðöðý@b£öb.OCý@>hðÖrCZb/Oªz¢A+ªÖäu<ßÜÄ/ÐßÖîbU:bÄÐã>/£ÜÃBÃ@Ð.r:ªª>©zî_ÄÄ:@A.+.aoÖ@¢åOåOBB|+Cvüa_+hz|~COoACAî¢+*Ä©*ýî~|.Äz|u+o~:<@>Arb:~£z<äbãv>Ðr©:ðýCößÖ¢UAîãý:Ã~.C*C¢uÖ*~CÄ*äAb>h@h_>,|u<<r|Ö><.,vå,.BAuo£_ãB.Örö.Ä>zoba~C©hArªB£Zü~oÃbb>î+ääÄCbÐýª*Üýburäßv/åOüA:Oß:obvz©ý/ßroäaª/bªvz©rÐ,ZäߢªÄ.ã.@z¢|ð*aCý©:ýÄövã<h+ÜC_ªÄßÜ.@b,Ä,,Ö+ÃüäCvUrÃ_Z,ªî|Üh|bbvýÐðÜoð@bªüb¢öª~åªAB@ðäb/.O@üvUh*z>,öAbö+ÖCb~uÖ£züî|_ö~*CÃ>+ý/_ß+ãÐz<u¢ã@bÖÖßß<r£_Oý+â,ÖhUv|Ðüð', null, null, null), array('54e16f51-64f1-4d62-a028-582b553c2de5', null, null, null), array('2130-04-16 14:12:00.131', null, null, null), array('2032-05-10 23:32:00', null, null, null));
case 2:
return array(array(2, SQLSRV_PARAM_IN, null, null), array(27, SQLSRV_PARAM_IN, null, null), array(-20174, SQLSRV_PARAM_IN, null, null), array(-840346326, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0.4880, SQLSRV_PARAM_IN, null, null), array(0.9184, SQLSRV_PARAM_IN, null, null), array(0.6916, SQLSRV_PARAM_IN, null, null), array(0.7257, SQLSRV_PARAM_IN, null, null), array('<ö©ååä,ääÐ*bhîvr<Cý¢î©ßZÐ_å©ÐZ,UC:<öa</©bU*Uö@u*AðaßÃBÄßh+o+üÐC~*böÃ:*OaÄ*|£z|+rZ_¢ßv~~a֩ߣZbÃ+CÜîä~|îÄÐaB+_b>~aöb/BzZÜ@öðß@_Ä££r__£>£Ð£ðbU<r<Äou£+ývUß<h+£¢BOrz<Ä*@öö@z*ÜoubZZ<u¢Zå+£,öÐb@haB_Öåöa@hOuZhA©>B~/ãbo.>îzöã*,ßå/+zuu.+BZßzA,aÖzüåão£©BãÄbä~ýooÜ,+äßÐ:UÃrz|vä,Bå~¢ä<_£uÜv<_O|ßBC¢_£Ahöª_¢oözCßýzöüý+zÄUÖhB@Uîbh/u/©zÐbÖ¢A*ã,Ãî£<>rUªßÐßîZîåb:+¢|A_BÃo©ªäu,*ýååbU:bÖÄß|¢>¢ÖaãrÃO©Äv+oßöZãª,+/.ãa/㣪,¢ðÐ<î¢b.£Ü©_r©vª@î:>ÖðB:OrBÜЪý|bßbÜ|åUOåîOãÄãuÐ|/îörB£ÃßZZÄ@Z©bÜB:.¢@b££U¢äÐvÐ+ý+uzÃb+üo+öv~_©~Uhbª,ßCb+UZö>Üü', SQLSRV_PARAM_IN, null, null), array('|öÐob*+ÐÖ<UU|ßbCªb¢ªuCüoUOü:Ü/>,..Ä¢ß@>îß*äî|å>~Oo+/o+*/ü|îî,ðö*ýåãob:zb|Äßîvb¢,Ã,UªbbrAbZ©uªª@ä,_ð©A*>Ðävä:|:oîö_rý©+vî©ßBßßb>üOö@Öoö*+î@ÐßrÖ<¢hÜZb._raUaýUUÄößßîU¢ð.ÐýrãBh¢>Äðz<©AÜ/|©Ö@>hüBCO~öýZ>äÄÐAzä~/b.ÜzbðÜbða++ªå/ð~ACÐî~©>./<Ööý<~ýuÃBÐãåo*h©ö£öîüZß:ZÐä_>Ðvî©<aBð_ß++OzOÖhö,ÜîÐä<_><h|OãhÄr+<öuÄ*AÐ.ä~_Üý¢Ähß<Ö~a.:Cü|ü++öu©ýöÐßîUbÐOzaåýÄ>_äbb©ö¢*b@BÐÜb+bî+åßAåîu|/A.Ä.~hvb:@zå|Ä,ªÃZß@v©ßvB@Bð:£öß@uðr££ðü<Ä¢äÖaßO.:rª/Ao,ª:ZbA+¢ß|>,*ßoöA+ãb|Aü@bÄð@a:+,<b_¢r*åöBbßZU£<.U>ouªýª+£ðr*Bã¢+rCðUU_ÖÃ>îö>r©v:U_v@vCÜ>', SQLSRV_PARAM_IN, null, null), array('29a27f4f-9e94-45a9-9110-812ef69ee37c', SQLSRV_PARAM_IN, null, null), array('4262-03-20 19:16:36.081', SQLSRV_PARAM_IN, null, null), array('2065-02-17 00:36:00', SQLSRV_PARAM_IN, null, null));
case 3:
return array(array(3, null, null, null), array(170, null, null, null), array(25360, null, null, null), array(1352271629, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0.3807, null, null, null), array(0.4393, null, null, null), array(0.8725, null, null, null), array(0.2057, null, null, null), array('ZÄßÃ|vbB/O<ouU*+ð>ýÖ~AABß©Ã@ÄÖßz~åz@ü.Ö<*~<B/Ob_ðð<öå<vUÃÃîîª|.Ã,oª+öã._Ö_.a~ðêªhªÜvã/Cªbßv>ãäßOÜÄv~Īb_ör*bvÃÖýZZ<ö¢.|Ð>ÜåaCAîâãßu/aå|@U*¢Bb*+bZr_.ã|,h_BöÄb.ðZ©//î_~v/ð/,bð¢/:@öãß+vÜv/båðöã:ã/z:£î<_ÐöC>.Ozrð©@rC~Bö,£o<:Ã*<bý_©¢Oß_b.Cåuß+BCäüv/£zvz,býÐýbAª£./£©ªÐäüoÐ:uĪvb+ªÄbb:©U*uhßßb*bZª.ð:<UU/<<ªßBÃ<Äâ>z_ªöÜ,z,ªboB,+öCr*¢î*<£~ýb:U|©Bh/ãÜÖý:obhå£+Z+r:o|v+bÐhãåaüÐöbãðöAÃ|ªOCÖO|Ü<ãvv¢ãýbý.ÐbÄÃðåü>/BbbÄ/véäý:@o>öÃaªÐ+îüýã_röýä©zhvÜ<Ã/CäaðoCB|å~~ÖaðvuC_hBrOrzÃßO©ZU.AvvåÖÐ/ÐãåZ©£,UãÖAîhUzªrö£Ãu+ð/v¢o_<ÐA@', null, null, null), array('ÄßZrð@~ö:ü:£,CoÄ©böBAO,ð:aA>ãÜBÐ@./:A.Z/bÖÜ,>ßî>ýßß©b/<@/,Öî>BBÃäÐCüÃÐÃvÜ_AZ.ý/©C_>aö/£Böða©£,öý£B_ÜÃðßvh|î|.oB/öBÜö¢BÐ/bAAÜÄa£.ªA©z<£ýOÐrå._bÄÜß~Ä_ªý,|+BãîA~Cî@ü+@ÜüzCªr.rzåazUöCzBߪ©Bö+ü*ZãÖ@AC*UA¢..aÜü*ArÃz£B:ßßÄ+Ã/ãª+ßZ_Ü<ßäîýýî@ðÄÜßÃÖðova£ªOöÄzÖ©ãrabªÐUrår+Ü*©OöåBö|a©î:bß©ð~_C_o*hÃ@åBb|<åÄß@©ý.Ubª,O£Oz|üßbz£+bã¢a@>:aaîý_Ür£|hÃ@z<_hüÃü,öîZýuã_¢üå£<ðßAª>rC.Bî.©,ß*å|é*_B>CÄîÖÃU~ÃÃ>rª>/ð©Ö|~ZA>¢¢/@£bZuZößzðå~:/h@uÐoOrã<¢aîßüß<¢BZzO¢@.:rvÜo>ABzC/ÜßÖ::r©O/v*@üaäzßZhU@aßvüî:©ü~ðª©_b£ä£ãB@:bhCÄZÜzOUßoåîÜý><', null, null, null), array('55a1f242-dad9-4f8e-b839-364fb6e1ffec', null, null, null), array('7060-11-11 17:57:33.899', null, null, null), array('1920-07-05 00:42:00', null, null, null));
case 4:
return array(array(4, SQLSRV_PARAM_IN, null, null), array(229, SQLSRV_PARAM_IN, null, null), array(-13459, SQLSRV_PARAM_IN, null, null), array(-8557402, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(1, SQLSRV_PARAM_IN, null, null), array(0.3122, SQLSRV_PARAM_IN, null, null), array(0.3036, SQLSRV_PARAM_IN, null, null), array(0.8606, SQLSRV_PARAM_IN, null, null), array(0.4224, SQLSRV_PARAM_IN, null, null), array('uåîAZ©ÄZöäÜO@ÐðZ:r:vÜ@ýA/,O,ãBß>¢hð.Z>£Bߪ+¢ªZU/@@äB.orÐîå¢ð>*<äAv~,ß@ýü~+<oo+/hCÜåzuÐb:ðr@.åÄ¢<h>~*Ðå¢ý_å_bÄb~_<<ßÄ:o¢zrC<ªa~BäÐýA©ßB.Uhîß+rAÖå¢ýö.îîaýåUC¢/Aüöß©zÄaðÐ,b|||+vCO+~üA£ÄöãýbÜ_üßãCðã|_ÄbäÃU~***<¢¢höUãbözbÄ>Ðühr.vÐ:£_Ä~<ZÐvÜb+¢>@/o,a_abý_>ßr*å|bob¢îãBî~<üBÜouÄBar_üß.ÐÐ,©ýuÖUöäÐÐîZýªÃ*vß|~îZßZÜÐrh*~UÜ*î@OBÃßraUb:*/B/@OÄaãoßBãÃ<AAß@o>höBb@Uªý*|£U+ü*¢ß¢häUðOb/*.rßOrÖåüO<ý*aöCa@ªoä>ÐC.UO+ZUrÜA©Oã,ro+î+,Üå¢<¢rÐu.ªî|ãÃB,ða,ªÐüÄü©ßBÖß+uv>BöußÜ|h|aßohB*ovãu+@Ü£ßO©ßßBý:b+£bÐÖäªo:UAÐo_ã~>ö<ühåÖÐ<hbCýÜA~|Üß', SQLSRV_PARAM_IN, null, null), array('Aª./UbîvÐð££ãuzo@>î>å*v¢ß<OÃr<o.Ð*_å|bÄbü>a_>/ZÖ:åbbäz¢Ä*Ü¢ÜåubvÖUî@Ã:¢<Üß_.*Öh,o/uz.B_/Äã|Ü/öOÐ.ÐßU@ßbav~zAßu+ª£U¢<ýÖä©Ä>ßãåäbã¢ßýªöåä,*ubßß@¢><üCozÐЩäC_aauC/_<.ýuÜ£Ö,uCÜÃbåräZ,ðÐî@îbzÖã+ã,CB£ZzB¢vÄ*+Üb¢üýßU*oÄärãü@öîaß.|äý©bÖ|BuA©ª,C/ZB*ð~aÃÃvîü©+ªÃ+Ã_öuu¢ZöbÄuð©O¢Z@_uä|bu,äOÐÜbBr@|Ãüb/îr©ß.ååßÜabZ©hß+ãߪz|+Aå@äü>Ä+ýu|å¢z|bhr*ªbO©>/ö,hÐå+Öå_OßZ|ð,b.AäÐß_@ßß©.üüZäuA/aC|£CäßýbhÖÖªZö@ÃhßÖ£/å*örüßðU*~vhðv_Üðýðß<+bAbBa:ªÄ/vܪUuÄîîabãßO>:,Ãýðußßäö@vîhäÜ>£¢hý+zAZbaBðУ|å|ªÐ*:Ã>ª:ð£ÐüßÖbuªOOA>Bb©ÃärÐîhzö,+|C:Aö', SQLSRV_PARAM_IN, null, null), array('34eeff6c-7d28-4323-9e28-d6b499fde336', SQLSRV_PARAM_IN, null, null), array('4191-02-05 02:41:51.953', SQLSRV_PARAM_IN, null, null), array('1975-12-01 15:24:00', SQLSRV_PARAM_IN, null, null));
default:
return array();
}
}
function RunTest()
{
StartTest("sqlsrv_param_input_variants");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password, "CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
// Insert data
$numRows = 4;
for ($i = 1; $i <= $numRows; $i++)
InsertData($conn, $tableName, $i);
FetchData($conn, $tableName, $numRows);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_param_input_variants");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_param_input_variants' test...
Comparing data in row 1
Comparing data in row 2
Comparing data in row 3
Comparing data in row 4
Number of rows fetched: 4
Done
...Test 'sqlsrv_param_input_variants' completed successfully.

View file

@ -0,0 +1,181 @@
--TEST--
Test parameterized insert and fetch sql_variants as strings using various data types
--DESCRIPTION--
The following lists the types of values that can not be stored by using sql_variant:
varchar(max) / nvarchar(max)
varbinary(max)
xml
text / ntext / image
rowversion (timestamp)
sql_variant
geography
hierarchyid
geometry
datetimeoffset
User-defined types
--FILE--
<?php
include 'tools.inc';
function CreateTable($conn, $tableName)
{
$stmt = sqlsrv_query($conn, "CREATE TABLE [$tableName] ([c1_int] sql_variant, [c2_tinyint] sql_variant, [c3_smallint] sql_variant, [c4_bigint] sql_variant, [c5_bit] sql_variant, [c6_float] sql_variant, [c7_real] sql_variant, [c8_decimal] sql_variant, [c9_numeric] sql_variant, [c10_money] sql_variant, [c11_smallmoney] sql_variant, [c12_char] sql_variant, [c13_varchar] sql_variant, [c14_uniqueidentifier] sql_variant, [c15_datetime] sql_variant, [c16_smalldatetime] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
}
function InsertData($conn, $tableName, $index)
{
$data = GetInputData($index, $tableName);
$stmt = sqlsrv_query($conn, "INSERT INTO [$tableName] (c1_int, c2_tinyint, c3_smallint, c4_bigint, c5_bit, c6_float, c7_real, c8_decimal, c9_numeric, c10_money, c11_smallmoney, c12_char, c13_varchar, c14_uniqueidentifier, c15_datetime, c16_smalldatetime) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)", $data);
if (! $stmt)
FatalError("Failed to insert row $index.\n");
}
function FetchData($conn, $tableName, $numRows)
{
$select = "SELECT * FROM $tableName ORDER BY c1_int";
$stmt = sqlsrv_query($conn, $select);
$stmt2 = sqlsrv_query($conn, $select);
$metadata = sqlsrv_field_metadata($stmt);
$numFields = count($metadata);
$noActualRows = ReadData($stmt, $stmt2, $numFields);
echo "Number of rows fetched: $noActualRows\n";
if ($noActualRows !== $numRows)
{
echo "Number of Actual Rows $noActualRows is unexpected!\n";
}
}
function ReadData($stmt, $stmt2, $numFields)
{
$fetched = 0;
while ($row = sqlsrv_fetch_array($stmt, SQLSRV_FETCH_NUMERIC))
{
$size = sizeof($row);
if ($size != $numFields)
FatalError("Array size $size returned different from expected, $numFields\n");
echo "Comparing data in row " . ++$fetched . "\n";
$obj = sqlsrv_fetch_object($stmt2);
if (! $obj)
FatalError("Failed to retrieve row $fetched!\n");
$fld = 0;
DoValuesMatched($obj->c1_int, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c2_tinyint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c3_smallint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c4_bigint, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c5_bit, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c6_float, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c7_real, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c8_decimal, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c9_numeric, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c10_money, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c11_smallmoney, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c12_char, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c13_varchar, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c14_uniqueidentifier, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c15_datetime, $row[$fld], $fetched, $fld++);
DoValuesMatched($obj->c16_smalldatetime, $row[$fld], $fetched, $fld++);
}
// returns the number of rows fetched
return $fetched;
}
function DoValuesMatched($value1, $value2, $row, $col)
{
$matched = false;
if (is_null($value1) && is_null($value2))
{
$matched = true;
}
else if (is_numeric($value1))
{
$matched = CompareNumericData($value1, $value2);
}
else
{
if (! strcasecmp($value1, $value2))
$matched = true;
}
if (! $matched)
{
echo "Values from row $row and column $col do not matched\n";
echo "One is $value1 but the other is $value2\n";
}
}
function GetInputData($index)
{
switch ($index)
{
case 1:
return array(array(1, null, null, null), array(167, null, null, null), array(-28589, null, null, null), array(-1991578776, null, null, null), array(0, null, null, null), array(1, null, null, null), array(0, null, null, null), array(0.0979, null, null, null), array(0.3095, null, null, null), array(0.8224, null, null, null), array(0.6794, null, null, null), array('~<auu*,/Öb£bbör,Aåbßå©+b_ãä¢ä*b<C.Ä/v£*,Buzößý~:ZÜb/Üå£îBðÃ.>Ö~.üoö©UßB.|ÃÄ£*/v|U/*bZ£ÄUÜß*+ööî*©ðü©bðr@éåbOý|©©hob/>Cz<Äå::Ð<¢ß+ü/:ª@zrß.¢Ü£bÜU©ÃßÜßðoß©r*bÜböOUvãahub£ãäªb>_ã£BOÜA©ãü/ߢß.ov:Ö<:_+uÜC:£oöü*BzC,Äö~Zî@/Z/r@/©<~.ã¢Aa</*bz.@åýBÄZÃA:zå<~öBbß|ªaýÃ,~><vBîv¢>ü>ý_zz@rÖ¢aU@,ABð/¢ß>z/ã@/ªUA~CoÄ,>bö|Ö>A,v+©CbC/Oo>©ßa©boAîÐvOo>ã|Cåöo+ÃhÖBAbo,+<ßã/£@å+ßAÜ@äÖÜOBäß~öu<aßß_bð¢ýý£_U:*Öä*©Übð,ãß,üððr+ß/U*ã¢ãüß:rAÜåz>*ã+a<îoo|¢üýoBaÃÜ£ãCaC@ha,äzäî¢ü@å£b~råîUbßr©ãßÐ:@UhAO>u*uýBbäZ£aý>v:ðC~ÜöåðzZ>O|Cä+£>öz./Ö+uÜ', null, null, null), array(',ßhr©+|v@,Ã+BZ|îAÐß_öýða_AoäAOÜ*ýC@hoBßßaä+ýöCäAä_Ä¢/Uî.äC©¢rÃuz¢*,ýß.Ðöðý@b£öb.OCý@>hðÖrCZb/Oªz¢A+ªÖäu<ßÜÄ/ÐßÖîbU:bÄÐã>/£ÜÃBÃ@Ð.r:ªª>©zî_ÄÄ:@A.+.aoÖ@¢åOåOBB|+Cvüa_+hz|~COoACAî¢+*Ä©*ýî~|.Äz|u+o~:<@>Arb:~£z<äbãv>Ðr©:ðýCößÖ¢UAîãý:Ã~.C*C¢uÖ*~CÄ*äAb>h@h_>,|u<<r|Ö><.,vå,.BAuo£_ãB.Örö.Ä>zoba~C©hArªB£Zü~oÃbb>î+ääÄCbÐýª*Üýburäßv/åOüA:Oß:obvz©ý/ßroäaª/bªvz©rÐ,ZäߢªÄ.ã.@z¢|ð*aCý©:ýÄövã<h+ÜC_ªÄßÜ.@b,Ä,,Ö+ÃüäCvUrÃ_Z,ªî|Üh|bbvýÐðÜoð@bªüb¢öª~åªAB@ðäb/.O@üvUh*z>,öAbö+ÖCb~uÖ£züî|_ö~*CÃ>+ý/_ß+ãÐz<u¢ã@bÖÖßß<r£_Oý+â,ÖhUv|Ðüð', null, null, null), array('54e16f51-64f1-4d62-a028-582b553c2de5', null, null, null), array('2130-04-16 14:12:00.131', null, null, null), array('2032-05-10 23:32:00', null, null, null));
case 2:
return array(array(2, SQLSRV_PARAM_IN, null, null), array(27, SQLSRV_PARAM_IN, null, null), array(-20174, SQLSRV_PARAM_IN, null, null), array(-840346326, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0.4880, SQLSRV_PARAM_IN, null, null), array(0.9184, SQLSRV_PARAM_IN, null, null), array(0.6916, SQLSRV_PARAM_IN, null, null), array(0.7257, SQLSRV_PARAM_IN, null, null), array('<ö©ååä,ääÐ*bhîvr<Cý¢î©ßZÐ_å©ÐZ,UC:<öa</©bU*Uö@u*AðaßÃBÄßh+o+üÐC~*böÃ:*OaÄ*|£z|+rZ_¢ßv~~a֩ߣZbÃ+CÜîä~|îÄÐaB+_b>~aöb/BzZÜ@öðß@_Ä££r__£>£Ð£ðbU<r<Äou£+ývUß<h+£¢BOrz<Ä*@öö@z*ÜoubZZ<u¢Zå+£,öÐb@haB_Öåöa@hOuZhA©>B~/ãbo.>îzöã*,ßå/+zuu.+BZßzA,aÖzüåão£©BãÄbä~ýooÜ,+äßÐ:UÃrz|vä,Bå~¢ä<_£uÜv<_O|ßBC¢_£Ahöª_¢oözCßýzöüý+zÄUÖhB@Uîbh/u/©zÐbÖ¢A*ã,Ãî£<>rUªßÐßîZîåb:+¢|A_BÃo©ªäu,*ýååbU:bÖÄß|¢>¢ÖaãrÃO©Äv+oßöZãª,+/.ãa/㣪,¢ðÐ<î¢b.£Ü©_r©vª@î:>ÖðB:OrBÜЪý|bßbÜ|åUOåîOãÄãuÐ|/îörB£ÃßZZÄ@Z©bÜB:.¢@b££U¢äÐvÐ+ý+uzÃb+üo+öv~_©~Uhbª,ßCb+UZö>Üü', SQLSRV_PARAM_IN, null, null), array('|öÐob*+ÐÖ<UU|ßbCªb¢ªuCüoUOü:Ü/>,..Ä¢ß@>îß*äî|å>~Oo+/o+*/ü|îî,ðö*ýåãob:zb|Äßîvb¢,Ã,UªbbrAbZ©uªª@ä,_ð©A*>Ðävä:|:oîö_rý©+vî©ßBßßb>üOö@Öoö*+î@ÐßrÖ<¢hÜZb._raUaýUUÄößßîU¢ð.ÐýrãBh¢>Äðz<©AÜ/|©Ö@>hüBCO~öýZ>äÄÐAzä~/b.ÜzbðÜbða++ªå/ð~ACÐî~©>./<Ööý<~ýuÃBÐãåo*h©ö£öîüZß:ZÐä_>Ðvî©<aBð_ß++OzOÖhö,ÜîÐä<_><h|OãhÄr+<öuÄ*AÐ.ä~_Üý¢Ähß<Ö~a.:Cü|ü++öu©ýöÐßîUbÐOzaåýÄ>_äbb©ö¢*b@BÐÜb+bî+åßAåîu|/A.Ä.~hvb:@zå|Ä,ªÃZß@v©ßvB@Bð:£öß@uðr££ðü<Ä¢äÖaßO.:rª/Ao,ª:ZbA+¢ß|>,*ßoöA+ãb|Aü@bÄð@a:+,<b_¢r*åöBbßZU£<.U>ouªýª+£ðr*Bã¢+rCðUU_ÖÃ>îö>r©v:U_v@vCÜ>', SQLSRV_PARAM_IN, null, null), array('29a27f4f-9e94-45a9-9110-812ef69ee37c', SQLSRV_PARAM_IN, null, null), array('4262-03-20 19:16:36.081', SQLSRV_PARAM_IN, null, null), array('2065-02-17 00:36:00', SQLSRV_PARAM_IN, null, null));
case 3:
return array(array(3, null, null, null), array(170, null, null, null), array(25360, null, null, null), array(1352271629, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0, null, null, null), array(0.3807, null, null, null), array(0.4393, null, null, null), array(0.8725, null, null, null), array(0.2057, null, null, null), array('ZÄßÃ|vbB/O<ouU*+ð>ýÖ~AABß©Ã@ÄÖßz~åz@ü.Ö<*~<B/Ob_ðð<öå<vUÃÃîîª|.Ã,oª+öã._Ö_.a~ðêªhªÜvã/Cªbßv>ãäßOÜÄv~Īb_ör*bvÃÖýZZ<ö¢.|Ð>ÜåaCAîâãßu/aå|@U*¢Bb*+bZr_.ã|,h_BöÄb.ðZ©//î_~v/ð/,bð¢/:@öãß+vÜv/båðöã:ã/z:£î<_ÐöC>.Ozrð©@rC~Bö,£o<:Ã*<bý_©¢Oß_b.Cåuß+BCäüv/£zvz,býÐýbAª£./£©ªÐäüoÐ:uĪvb+ªÄbb:©U*uhßßb*bZª.ð:<UU/<<ªßBÃ<Äâ>z_ªöÜ,z,ªboB,+öCr*¢î*<£~ýb:U|©Bh/ãÜÖý:obhå£+Z+r:o|v+bÐhãåaüÐöbãðöAÃ|ªOCÖO|Ü<ãvv¢ãýbý.ÐbÄÃðåü>/BbbÄ/véäý:@o>öÃaªÐ+îüýã_röýä©zhvÜ<Ã/CäaðoCB|å~~ÖaðvuC_hBrOrzÃßO©ZU.AvvåÖÐ/ÐãåZ©£,UãÖAîhUzªrö£Ãu+ð/v¢o_<ÐA@', null, null, null), array('ÄßZrð@~ö:ü:£,CoÄ©böBAO,ð:aA>ãÜBÐ@./:A.Z/bÖÜ,>ßî>ýßß©b/<@/,Öî>BBÃäÐCüÃÐÃvÜ_AZ.ý/©C_>aö/£Böða©£,öý£B_ÜÃðßvh|î|.oB/öBÜö¢BÐ/bAAÜÄa£.ªA©z<£ýOÐrå._bÄÜß~Ä_ªý,|+BãîA~Cî@ü+@ÜüzCªr.rzåazUöCzBߪ©Bö+ü*ZãÖ@AC*UA¢..aÜü*ArÃz£B:ßßÄ+Ã/ãª+ßZ_Ü<ßäîýýî@ðÄÜßÃÖðova£ªOöÄzÖ©ãrabªÐUrår+Ü*©OöåBö|a©î:bß©ð~_C_o*hÃ@åBb|<åÄß@©ý.Ubª,O£Oz|üßbz£+bã¢a@>:aaîý_Ür£|hÃ@z<_hüÃü,öîZýuã_¢üå£<ðßAª>rC.Bî.©,ß*å|é*_B>CÄîÖÃU~ÃÃ>rª>/ð©Ö|~ZA>¢¢/@£bZuZößzðå~:/h@uÐoOrã<¢aîßüß<¢BZzO¢@.:rvÜo>ABzC/ÜßÖ::r©O/v*@üaäzßZhU@aßvüî:©ü~ðª©_b£ä£ãB@:bhCÄZÜzOUßoåîÜý><', null, null, null), array('55a1f242-dad9-4f8e-b839-364fb6e1ffec', null, null, null), array('7060-11-11 17:57:33.899', null, null, null), array('1920-07-05 00:42:00', null, null, null));
case 4:
return array(array(4, SQLSRV_PARAM_IN, null, null), array(229, SQLSRV_PARAM_IN, null, null), array(-13459, SQLSRV_PARAM_IN, null, null), array(-8557402, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(0, SQLSRV_PARAM_IN, null, null), array(1, SQLSRV_PARAM_IN, null, null), array(0.3122, SQLSRV_PARAM_IN, null, null), array(0.3036, SQLSRV_PARAM_IN, null, null), array(0.8606, SQLSRV_PARAM_IN, null, null), array(0.4224, SQLSRV_PARAM_IN, null, null), array('uåîAZ©ÄZöäÜO@ÐðZ:r:vÜ@ýA/,O,ãBß>¢hð.Z>£Bߪ+¢ªZU/@@äB.orÐîå¢ð>*<äAv~,ß@ýü~+<oo+/hCÜåzuÐb:ðr@.åÄ¢<h>~*Ðå¢ý_å_bÄb~_<<ßÄ:o¢zrC<ªa~BäÐýA©ßB.Uhîß+rAÖå¢ýö.îîaýåUC¢/Aüöß©zÄaðÐ,b|||+vCO+~üA£ÄöãýbÜ_üßãCðã|_ÄbäÃU~***<¢¢höUãbözbÄ>Ðühr.vÐ:£_Ä~<ZÐvÜb+¢>@/o,a_abý_>ßr*å|bob¢îãBî~<üBÜouÄBar_üß.ÐÐ,©ýuÖUöäÐÐîZýªÃ*vß|~îZßZÜÐrh*~UÜ*î@OBÃßraUb:*/B/@OÄaãoßBãÃ<AAß@o>höBb@Uªý*|£U+ü*¢ß¢häUðOb/*.rßOrÖåüO<ý*aöCa@ªoä>ÐC.UO+ZUrÜA©Oã,ro+î+,Üå¢<¢rÐu.ªî|ãÃB,ða,ªÐüÄü©ßBÖß+uv>BöußÜ|h|aßohB*ovãu+@Ü£ßO©ßßBý:b+£bÐÖäªo:UAÐo_ã~>ö<ühåÖÐ<hbCýÜA~|Üß', SQLSRV_PARAM_IN, null, null), array('Aª./UbîvÐð££ãuzo@>î>å*v¢ß<OÃr<o.Ð*_å|bÄbü>a_>/ZÖ:åbbäz¢Ä*Ü¢ÜåubvÖUî@Ã:¢<Üß_.*Öh,o/uz.B_/Äã|Ü/öOÐ.ÐßU@ßbav~zAßu+ª£U¢<ýÖä©Ä>ßãåäbã¢ßýªöåä,*ubßß@¢><üCozÐЩäC_aauC/_<.ýuÜ£Ö,uCÜÃbåräZ,ðÐî@îbzÖã+ã,CB£ZzB¢vÄ*+Üb¢üýßU*oÄärãü@öîaß.|äý©bÖ|BuA©ª,C/ZB*ð~aÃÃvîü©+ªÃ+Ã_öuu¢ZöbÄuð©O¢Z@_uä|bu,äOÐÜbBr@|Ãüb/îr©ß.ååßÜabZ©hß+ãߪz|+Aå@äü>Ä+ýu|å¢z|bhr*ªbO©>/ö,hÐå+Öå_OßZ|ð,b.AäÐß_@ßß©.üüZäuA/aC|£CäßýbhÖÖªZö@ÃhßÖ£/å*örüßðU*~vhðv_Üðýðß<+bAbBa:ªÄ/vܪUuÄîîabãßO>:,Ãýðußßäö@vîhäÜ>£¢hý+zAZbaBðУ|å|ªÐ*:Ã>ª:ð£ÐüßÖbuªOOA>Bb©ÃärÐîhzö,+|C:Aö', SQLSRV_PARAM_IN, null, null), array('34eeff6c-7d28-4323-9e28-d6b499fde336', SQLSRV_PARAM_IN, null, null), array('4191-02-05 02:41:51.953', SQLSRV_PARAM_IN, null, null), array('1975-12-01 15:24:00', SQLSRV_PARAM_IN, null, null));
default:
return array();
}
}
function RunTest()
{
StartTest("sqlsrv_param_input_variants_nulls");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password, "CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
// Insert data
$numRows = 4;
for ($i = 1; $i <= $numRows; $i++)
InsertData($conn, $tableName, $i);
FetchData($conn, $tableName, $numRows);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_param_input_variants_nulls");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_param_input_variants_nulls' test...
Comparing data in row 1
Comparing data in row 2
Comparing data in row 3
Comparing data in row 4
Number of rows fetched: 4
Done
...Test 'sqlsrv_param_input_variants_nulls' completed successfully.

View file

@ -0,0 +1,130 @@
--TEST--
Test parametrized insert and sql_variant as an output parameter.
--DESCRIPTION--
sql_variant is not supported for output parameters, this test checks the error handling in this case
--FILE--
<?php
include 'tools.inc';
function CreateTable($conn, $tableName)
{
$stmt = sqlsrv_query($conn, "CREATE TABLE [$tableName] ([c1_int] int, [c2_variant] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
$tsql = "INSERT INTO [$tableName] ([c1_int], [c2_variant]) VALUES (?, ?)";
$phpType = SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR);
$data = "This is to test if sql_variant works with output parameters";
$params = array(1, array($data, SQLSRV_PARAM_IN, $phpType));
$stmt = sqlsrv_prepare($conn, $tsql, $params);
sqlsrv_execute($stmt);
sqlsrv_free_stmt($stmt);
}
function TestOutputParam($conn, $tableName)
{
// First, create a temporary stored procedure
$procName = GetTempProcName('sqlVariant');
$spArgs = "@p2 sql_variant OUTPUT";
$spCode = "SET @p2 = ( SELECT [c2_variant] FROM $tableName WHERE [c1_int] = 1 )";
$stmt = sqlsrv_query($conn, "CREATE PROC [$procName] ($spArgs) AS BEGIN $spCode END");
sqlsrv_free_stmt($stmt);
$callArgs = "?";
// Data to initialize $callResult variable. This variable should be different from
// the inserted data in the table
$initData = "A short text";
$callResult = $initData;
$phpType = SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR);
$params = array( array( &$callResult, SQLSRV_PARAM_OUT, $phpType ));
$stmt = sqlsrv_query($conn, "{ CALL [$procName] ($callArgs)}", $params);
if (! $stmt )
{
if (!strcmp($initData, $callResult))
{
echo "initialized data and results should be the same";
}
handle_errors();
echo "\n";
}
}
function TestInputAndOutputParam($conn, $tableName)
{
$procName = GetTempProcName('sqlVariant');
$spArgs = "@p1 int, @p2 sql_variant OUTPUT";
$spCode = "SET @p2 = ( SELECT [c2_variant] FROM $tableName WHERE [c1_int] = @p1 )";
$stmt = sqlsrv_query($conn, "CREATE PROC [$procName] ($spArgs) AS BEGIN $spCode END");
sqlsrv_free_stmt($stmt);
$initData = "A short text";
$callResult = $initData;
$phpType = SQLSRV_PHPTYPE_STRING(SQLSRV_ENC_CHAR);
$params = array( array( 1, SQLSRV_PARAM_IN ), array( &$callResult, SQLSRV_PARAM_OUT, $phpType ));
$callArgs = "?, ?";
$stmt = sqlsrv_query($conn, "{ CALL [$procName] ($callArgs)}", $params);
if (! $stmt )
{
if (!strcmp($initData, $callResult))
{
echo "initialized data and results should be the same";
}
handle_errors();
echo "\n";
}
}
function RunTest()
{
StartTest("sqlsrv_param_output_variants");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
TestOutputParam($conn, $tableName);
TestInputAndOutputParam($conn, $tableName);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_param_output_variants");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_param_output_variants' test...
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Operand type clash: varchar(max) is incompatible with sql_variant
[Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Operand type clash: varchar(max) is incompatible with sql_variant
Done
...Test 'sqlsrv_param_output_variants' completed successfully.

View file

@ -0,0 +1,207 @@
--TEST--
Test simple insert and fetch sql_variants as strings using inputs of various data types
--DESCRIPTION--
The following lists the types of values that can not be stored by using sql_variant:
varchar(max) / nvarchar(max)
varbinary(max)
xml
text / ntext / image
rowversion (timestamp)
sql_variant
geography
hierarchyid
geometry
datetimeoffset
User-defined types
--FILE--
<?php
include 'tools.inc';
function CreateTable($conn, $tableName)
{
// create a table for testing
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([c1_int] sql_variant, [c2_tinyint] sql_variant, [c3_smallint] sql_variant, [c4_bigint] sql_variant, [c5_bit] sql_variant, [c6_float] sql_variant, [c7_real] sql_variant, [c8_decimal] sql_variant, [c9_numeric] sql_variant, [c10_money] sql_variant, [c11_smallmoney] sql_variant, [c12_char] sql_variant, [c13_varchar] sql_variant, [c14_nchar] sql_variant, [c15_nvarchar] sql_variant, [c16_binary] sql_variant, [c17_varbinary] sql_variant, [c18_uniqueidentifier] sql_variant, [c19_datetime] sql_variant, [c20_smalldatetime] sql_variant, [c21_time] sql_variant, [c22_date] sql_variant, [c23_datetime2] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
sqlsrv_free_stmt($stmt);
}
function InsertData($conn, $tableName, $index)
{
$query = GetQuery($index, $tableName);
$stmt = sqlsrv_query($conn, $query);
if (! $stmt)
FatalError("Failed to insert row $index.\n");
sqlsrv_free_stmt($stmt);
}
function Fetch($conn, $tableName, $numRows)
{
$select = "SELECT * FROM $tableName ORDER BY c1_int";
$stmt = sqlsrv_query($conn, $select);
$stmt2 = sqlsrv_query($conn, $select);
$stmt3 = sqlsrv_query($conn, $select);
$metadata = sqlsrv_field_metadata($stmt);
$numFields = count($metadata);
$fetched = 0;
while ($result = sqlsrv_fetch($stmt))
{
echo "Comparing data in row " . ++$fetched . "\n";
$row = sqlsrv_fetch_array($stmt2);
if (! $row)
FatalError("Failed to retrieve row $fetched!\n");
$obj = sqlsrv_fetch_object($stmt3);
if (! $obj)
FatalError("Failed to fetch data in an object from row $fetched!\n");
for ($j = 0; $j < $numFields; $j++)
{
$value1 = sqlsrv_get_field($stmt, $j);
$col = $j + 1;
DoValuesMatched($value1, $row[$j], $fetched, $col);
$value2 = GetValueFromObject($obj, $col);
DoValuesMatched($value1, $value2, $fetched, $col);
}
}
$noActualRows = $fetched;
echo "Number of rows fetched: $noActualRows\n";
if ($noActualRows != $numRows)
{
echo("Number of rows does not match expected value\n");
}
sqlsrv_free_stmt($stmt);
sqlsrv_free_stmt($stmt2);
sqlsrv_free_stmt($stmt3);
}
function DoValuesMatched($value1, $value2, $row, $col)
{
$matched = ($value1 === $value2);
if (! $matched)
{
echo "Values from row $row and column $col do not matched\n";
echo "One is $value1 but the other is $value2\n";
}
}
function GetValueFromObject($obj, $col)
{
switch ($col)
{
case 1: return $obj->c1_int;
case 2: return $obj->c2_tinyint;
case 3: return $obj->c3_smallint;
case 4: return $obj->c4_bigint;
case 5: return $obj->c5_bit;
case 6: return $obj->c6_float;
case 7: return $obj->c7_real;
case 8: return $obj->c8_decimal;
case 9: return $obj->c9_numeric;
case 10: return $obj->c10_money;
case 11: return $obj->c11_smallmoney;
case 12: return $obj->c12_char;
case 13: return $obj->c13_varchar;
case 14: return $obj->c14_nchar;
case 15: return $obj->c15_nvarchar;
case 16: return $obj->c16_binary;
case 17: return $obj->c17_varbinary;
case 18: return $obj->c18_uniqueidentifier;
case 19: return $obj->c19_datetime;
case 20: return $obj->c20_smalldatetime;
case 21: return $obj->c21_time;
case 22: return $obj->c22_date;
case 23: return $obj->c23_datetime2;
default: return null;
}
}
function GetQuery($index, $tableName)
{
$query = "";
switch ($index)
{
case 1:
$query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_nchar], [c15_nvarchar], [c16_binary], [c17_varbinary], [c18_uniqueidentifier], [c19_datetime], [c20_smalldatetime], [c21_time], [c22_date], [c23_datetime2]) VALUES ((1), (null), (-6650), (null), (0), (1), (0), (-100000000000000000000000), (0.0504), (0.5199), (-214748.3648), ('/.Zð©vãÄAßÖðÐöuo©_Ä£öªÄ@£ß¢,Oðua*bª*>ããCvzªuðBÜ|uåîü~¢ÃãÄÜvå£<_BªÐ~©+î©ãÄ~+¢a<~|abozaU:Ä.Ö¢Ð|ü>ßß>£r@COzubvývbßuOÄä~Zrb*ZåvªZövÐB_ã@ã,bîåäböü::*ö._äBî_~.Zð£ã~Avß|îÖuZ,ß©üÄ:hh,ä:ð©å./£raUC_</bZßßob_~ßÜÄ:£åUbî*rböz~aãöåä'), ('o©:îoo/vbýý@h££ÜÃCb_h@î@|hoBroÃC|__ßrüBî<bhböß/+OorÐ.Öb£Öð*Aa*bîzåüªBä~ÄAObB,ã~ÜÄßîbööÄß<åAv¢båCýuÖbßãvz~>ÄuÄývð+'), (N'vvöªß/îa©î++|>üªßBÄ¢öªrÖßC+<OvÃrv.AhÄÖO+C~Z@~bÖ>aß<~ª@£ÃbOÜÃb/ã,robo:ãîbð+>,zÃOÖ+ä<,ßCªÖÖ+b@ü>ZÃÐîz.ýªboî/£uAv++aAzOü<~B~z.BÖ,b/bߣ.,ÜÜÖßZ<+<+Ð>ýÐ@öOCÐUzrãÃrö/_*uou¢öýuU~,©ar¢r~ðBAähUüb,BoöB|äå<ýuäðÃb|:böä>bäÐÐu__ÖuýÐßO<vZßru@~Ã/ßö+B@*_UAA©bãäåbAÃßUa@bÖrÜv£åÄ+î+/ðÜå/a/ÃÖÃÜ_.:/ðorßÜ:/zî¢åÖbî,zÃÖÄ/ðBOª©,|Ußvrß*ãÄÐ@_h'), (N'¢åU_v+ß,,BÜÄa>ãüªo,îO>¢.b/uO©ßh¢Ü/zuöb,AÖå:O/Bz*åÖî,ÖAßCUã<äh¢Ä~öoðªOªA|Ü*hZb:ýýCåZîîÜäÖªOýBª_îhoäuvoÄoZÐ+ª.å_bßä<ÖUzß©Ozoaý¢ðöU:aCOrÄß.ÐaO|o:åbBOuhߣã+OAüýÄoÃß.*üä/î~h£*_Z£CaäZöå/Ãß<ßOÖýoÖßÄ~*ß/>a@ÖuUÄå¢ßäB_äßä+ßou._|äßCÃz+ã¢öoBaUî£UÄ:Uªßý@zßhýßÄÜ~Aö<©öC|,@ßOîö:ã|üÄ|:ßhöÐäzßîO+aðO~bbßUÃhhbÐߣb|åö~ABozÜåýÐߣz©roÜUÄ'), (0x3F69A37E16303C7AC955661D1BED304E9674FA57E87BF1B2B85E7F31B75D57EEB7FAE5F97FA9E7E77C921B2910D481C88E564752D3FDD5C477F1C5B8B10AC36CFD7765210837CEEC8D12DB555FC8A1E4DDB6A26016051BB92421818DE42F3671CFAF2C996F5FC057885AC5C1227F64AF4FE1DAFA686256F75BACFCE7B540085DDB6A85B09B08747DF64BD8BB405A97A5BCDE9E72E8EA6D08E46AC42909973DB63CA2E2EB3A6E63B604), (0x0F), ('00000000-0000-0000-0000-000000000000'), ('2326-02-20 08:51:23.203'), ('2024-02-29 15:02:00'), ('12:39:54.0255300'), ('2001-01-01'), ('2924-06-04 08:59:21.2768412'))";
break;
case 2:
$query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_nchar], [c15_nvarchar], [c16_binary], [c17_varbinary], [c18_uniqueidentifier], [c19_datetime], [c20_smalldatetime], [c21_time], [c22_date], [c23_datetime2]) VALUES ((2), (0), (-16753), (2098337643), (null), (0), (null), (0.5371), (0.1049), (0.5799), (0.2674), ('Ub£b*u|+ßCî<Oo©ÐåroUB/ö_ßÃö_Cüb:öhýö©ª.uÐvvzubÃöaä:bÐýOãhCu©vauãb<_AOÄbvßð@ãh£zÖýa@v_ýÐüöhß_+ÖöÄA/UÜ_©ÖZßoUß<+Ã>ß>©v@üzbÐ~BAî_ðbýßßÐ,|u*Ur>,Öö>ª:'), ('åb©rbCOAü|Ä.UuOß©|üCUv*aZ>ð*ßb>~~ßbýz~Ö¢r@UÜ|ßuo~oßA>r<ªÐ©ð~OäUåbhß<oO<Bß+îÖa~<<vÜÜ¢v:B,z:v©©o/+v,Ã/ýÖý,ÃÐuhZЪhr<z/B¢ª¢A:oÐðß:£ð|>¢åb<@ß,ö|uöb~ãC<räýv£Üb,|ªv<åZ~rÖUýUhýߣÄÃb.B+~åß+UßðvããßÃîî@ðbU£Ö**ääzrb+~üÐÃZrA,©_bßv>.h:<båCߢßÖ*AuaðAAÐ~ÄåCC.ÄåhU_rã<ãöÄ/ãhOUß*ððöOß+Ð>abÄÜ_Azb+aü_BªðäOZZ@rî|zð_rr:_BÜ_AOÖÜb.ÃBÜÜovUU*abý>buZC_,äýãC£ãîrab.oBCå¢.:C,A©ZäO,_ªÄZÖbu,r/äýhðvbUröãýå¢:ßäýo*rÄüðUZz>ÄZzöÄî<Ö/zrCü.bð*,£üv<åbbAaÐîbå¢ö~|î¢îvýoÄ.|ßA,ߢb~å£*uu/uä©åÐã+/~o,äOZ:C©ß|b*ZA©uBä<ýýª+z>,bªB/äACuåýö/ÖhÖý_©oböãa©¢ýå/ª'), (N':Ö_Öo>rå¢CÄ+Ä¢_<Üîüã©ÖÖ£Üv~ª/Bî+h£vzO|b~CÜ¢ßö£u£ðÐÜh£ªªÃaîýîðª<_u*rb+uZuß.ÐåCüÃCAöÃÃ*ÜÐ_A~zZ|O©@zB|ª:hvÄ:_zUåÐ~bråäüðÜO:¢©AÜða©£Ðr~'), (N'©î©üUß<>©zaUbÃ*Ī_ðCýßB@ß:ä©@©o|©hröZö_,ýCa'), (0x00), (0x7F706F21089D4564F6AD294C130B9080F17FA23DB5F0F5E226DF33A8FA7B4E37A6FB84AEC130BF9FBC510599E6094F3F8C09AF0D8BB5278F7B8DFA28699C697B5FF1A51887E1BEC0C0028064EB5BFC1C8FF31BF0CB40ABF1D3F533343597351FE7893AF46336B8AA4BEF4D8935C2A42090DE98758179B01F45B44591AE8A8A29CD617D612108B9593B71A5DBF222BC105113A457FEBF9E6DD81BAEAFF126FCC06424BBD34542FE88243F390FD4D42C22F834409BE6332A0EC20F88065909671574E477CD67E8CB0E141B32BE858E9903EE8CB7BDE560DA31F9AC1135B9F82F1BD7249BEF5D5FBB0F693187CA006C8934768417CC52AA30140A46D3BAD795551BEC17E661F3A9A68ED1A754B3D90F308D23DCBF34E062C92DF386E5178C0038D3DC6CDEE9862740CCDE89FBAA567D3AFA154696FAD5203A894DB96D6CC48E02D06E80D66D314707FC9CF35657661ED6764CEA02466A3EFEBC32549BCCBAD30750862B3BD6A6CDC9CE3E9A5EE2C9E2232EE2F720), ('95850cf7-8b0c-4f61-aa3e-25eac6efe46c'), ('3058-07-22 07:25:00.198'), ('2007-04-23 17:42:00'), (null), ('2016-10-31'), (null))";
break;
case 3:
$query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_nchar], [c15_nvarchar], [c16_binary], [c17_varbinary], [c18_uniqueidentifier], [c19_datetime], [c20_smalldatetime], [c21_time], [c22_date], [c23_datetime2]) VALUES ((3), (141), (-26849), (9223372036854775807), (0), (1), (1), (-100000000000000000000000), (-1), (null), (-214748.3648), ('.å|ãð|ÄvÖß*vbb_ä£Ãߣ,¢>bЪhUå.BaÜäðZ>ð£ý,ÖOÃ|_aУAbüvCzß,@Cz.<,*Äz@OoU+Ðbßv¢/ß>Oª/ªä*CÖ£_hîýßzªî,äýUaß|.©+ð:ãÄ+~aðÐýå@ý~|ä©a++îÐu+U|ãUoÜäOrýOzßãÜzý媪aää.Äho|bZ:Ou>:ßÖÜÜüCÃza.UbßUA,Ah¢*.Ä:_aªzhîrCÃZ/A_ü*,B©:¢ßCß@.OU_*/'), ('h>ª.ãîbã@£Ch©:.ÜÜCåß©£_Bß//ß©ßvÖBß,<ÐüvÖ.ßZ<©+ÐÐãÜ|ZÃ>|@ü@ª.<UoÄ,+bãbðAßãC/ä*b/:ÄÄüîuýbªUå>r,ävo¢ªBZzå©îÐÖ:|b'), (N'ÄÜvv>,Z:~O/ã/ýãvUÖöCCßAbO<_@_|Ä~Cuo@å+BÄaåZ><î*<Ðß:/üüaåÖuBaäßðA<äÄOß*,å£uC'), (N'|ªZCbßÄBvªhrZÖ©vbäröva¢Oo©./~ßÖäÖ+r£ßåßauðOU|ü_~Т|,îzU_üBü.,v_>äZ:ð|A<OArÐ+ß+¢OhßÄöu+ö:C©©Äî/¢ö,Ã.v@ªaÄo+*êåЪ<ßU~~~v>*aßî+ÖZ¢ªßýCü+©|ßaßäAväuðbuCob,ß/îð@ÜC*.bÄBßCCÄÜ|ß/<boªüz@o<|/OÄb/oÜÃÃBÃv<Ohä֪ĪåbÃvüAAuz:ð£+~U¢*©å,CU+><Ö*£ßß_ý<<arÜ@ohöBu/Obîîð@_bÄ*<¢ÄrßrÄ./@îöoî~bäß@Ö/AAðZ/ã/Äzv<vhý,@~Äö/|ÃÄ_Uîa*å©Ä|üî:~Ü'), (0xCBAB9B63B5DD23C02818F80CBAA04EA41ECB6FF7ECAE2496171660469E3F731330C949AA10D861D6C664D1DD9BA04020C9319EF2D731B31D86044C9F7DDD22E8A4E4DCF057A394456A993188DC46FB76D6407C6DA0813CFF152B240B8CC258E840533413A2CBADF2B65AED914391E0200BD43466A5132FA7BC787CF0D781DCB222F5C7E195449E4903EBD678B488C951226D9C9BC1BCA8CC238D562A4EBD1B357D3B6F4ECAFE8AC735), (0xB93DB7F234AE2BCD69E441F0654CFABE08EE74FB46D0A1FA79197B8623E2D565D759EF8F6B9A227B23EFB1503C4A09042A425F30FDA463EE140DC816C4CB4BFF4B0ABAEDC627123831CE5778A44DC4B05912F30E5EFE13D453F44BEFDBD1783AACDF832507603748E52613BB4B4F2CBFE48B643CFF3BA4F944435F8FEC80B19322A2459268BB6A705F48C323B5D462CA8F14D9B4714E5B013B8AE1C400A85B65758099A80999572921), ('cfd87d03-0db6-4e6e-989c-2a0459660bb3'), ('2313-08-20 10:52:29.861'), ('1900-01-01 00:00:00'), ('02:44:51.6130224'), ('9999-12-31'), ('1400-02-25 11:23:00.4519650'))";
break;
case 4:
$query = "INSERT INTO $tableName ([c1_int], [c2_tinyint], [c3_smallint], [c4_bigint], [c5_bit], [c6_float], [c7_real], [c8_decimal], [c9_numeric], [c10_money], [c11_smallmoney], [c12_char], [c13_varchar], [c14_nchar], [c15_nvarchar], [c16_binary], [c17_varbinary], [c18_uniqueidentifier], [c19_datetime], [c20_smalldatetime], [c21_time], [c22_date], [c23_datetime2]) VALUES ((5), (76), (-27503), (298552558), (null), (1), (0), (0.8696), (-100000000000000000000000), (0), (0.9480), (''), (' '), (N'ßßuäßuîBüã£~¢îv¢ãäz>_ß>aaOßåö.*OªÃý*üBhßî¢Üo@üAîÐß~|ýBUa*rã¢/Ao~>:üöîð£ÖÄ@ªðbz@AhîhCãÜr>:ýaÜU@,å:r©býBaßoßä<@zöaÄß>@åAÐÄU<>îîå>OhÐ<ä£:bAî*öaðÐýhbab:Aäý.<üß@¢BåZzÃ*ßãB+UÖ<¢_BÐß@>+äîßbovÐb.ã_.ß:©Ãu.OZü£ßÃ|U<zÐoZavUý>v_bbÜÃâubßb:A~CzbåUý+ªavÖ©_*@h|<o/Ä*C_vüO<>:,åÄ~OÄr+Ð@îðbßAAhZÄîU¢vªäÜr_¢ZßîB~îäüöoßörУ_ÜZz>UßîÖ~OÖªBÐ.@©Ö:Ðaß>îObOCîübå£bb>åb+<åh_,hUäuÖZv<Zî_üß/zO¢ßã¢håüA£ð¢¢,üääZBÖðrü+ªÃª~Ö|CÃ:ÐoãBZîuUZãªãéb*b©©Ä©.ý©/uð|zr<@uOårCÜ|,å@£,,_ðA@uÄå:ýÜ*OO©büÃöb+bª@ÜårvCZãoÖªZåzîAb@~bU.|aöB>.O||aZð/U£A/Üoo¢~~åßÖ'), (N'å|Üa+BuävO¢å£¢rªýüå©,bBßîBßü:bzÐ*@ÃýUv~zAßÜuoZ@a+ýåßä/vã<üBUzU.råå_Cðu+Ä.|¢~Z壢ªßª:o>åðuä_vOzaÜ,|+vÖ,bh£o.ZßÄ|~*>©_£üA,a¢åbÃb_B|ärÐ_+ärÄ:ßaB~C_zöðé<C/_üUh>ý<|¢zÖö>ßbü£:ßOoAZ:>+ÜÖoä/BÐÜO|BÄÐÐýU,ÜßOA>åübu£ðv@Ãß©hrÄ.Üå£uУ@äðÐBrî©@¢ZzZäOßr:ß@ÃåZb~@väªåOözã,BC>|Ð,äoO+ãðäröÃr:rö£~åhªðAb¢:*ý:>bÄÄîbhãÄBÃÐ~/©£rü@CåÖ_u*öß*ß_Öaä<,CUüZ,bCö<r.a@,./<ãä|Ö|<+öUßao+©åCb_.U©CbÜßbAööZü.CvOýî¢~ܪ+hvBÜC__å:ãýOßÄßßö>:/aöã¢AB>îr/ü¢£zýÜ©Aü>.bãC/ð<<oCÃB*o*O/>Ðab¢ÃAå,_>ÄAhð@öaöBÄOB¢aÐBÖåv<ýß+oZö:ß,ßUA,ýÜhüÜ~.h,bÐz¢.Aî~výBb@ðÃý£~>'), (0x00), (0x92BDFAA6637CC331324265EE0D819DB02A8FE57B5001480073A02C4D470E99DDEBE9B2FF460387BC3F55A4E997E9C3640605ADB1BA3DA99175F933C24F75EA23A9870224CF9E692608293CFA5C5F6989DCC7474161E723AD3F218A4CD0C46CC96B813F0FE69F95679B86A99001AF341590A9E5872EA8C2C16455E5AD141C5643BC728FDB1F5AA33D32DFA5DA3E92AC90ED74BC26DEE49BC2BE7EAA91B9E7537F2F65D48E2058F53605A8554E02E783D1A954C09F603065D7D7CD1CA1AF12834A8B26ABD8BE1D70947F8620368F4CBFD7FAD9E76427B41FFF00FCB7523B5386F3240AC2DC3CAB128CE42B1FD90F2E478A0D45A7D52A1E23D707ABD7C1651D592CFF2D11858AE39B4FC65B80FB9545F0D1B42D45F6ACB0C805E6EBD490D35026C7D2F3D9E11DC1FF2AA9580FCF9E2741C2BB050C37), ('55a1f242-dad9-4f8e-b839-364fb6e1ffec'), ('5256-04-02 18:20:54.032'), ('1900-01-01 00:00:00'), ('04:36:52.8132961'), (null), ('2001-01-01 12:01:00.0000000'))";
break;
default:
break;
}
return $query;
}
//--------------------------------------------------------------------
// RunTest
//
//--------------------------------------------------------------------
function RunTest()
{
StartTest("sqlsrv_simple_fetch_variants");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password, "CharacterSet"=>"UTF-8");
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
// Insert data
$numRows = 4;
for ($i = 1; $i <= $numRows; $i++)
InsertData($conn, $tableName, $i);
// Read data
Fetch($conn, $tableName, $numRows);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_simple_fetch_variants");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_simple_fetch_variants' test...
Comparing data in row 1
Comparing data in row 2
Comparing data in row 3
Comparing data in row 4
Number of rows fetched: 4
Done
...Test 'sqlsrv_simple_fetch_variants' completed successfully.

View file

@ -0,0 +1,193 @@
--TEST--
Test simple insert and update sql_variants using parameters of some different data types
--DESCRIPTION--
ORDER BY should work with sql_variants
--FILE--
<?php
include 'tools.inc';
class Country
{
public $id;
public $country;
public $continent;
function getCountry()
{
return $this->country;
}
function getContinent()
{
return $this->continent;
}
}
function CreateTable($conn, $tableName)
{
// create a table for testing
$stmt = sqlsrv_query($conn, "CREATE TABLE $tableName ([id] sql_variant, [country] sql_variant, [continent] sql_variant)");
if (! $stmt)
FatalError("Failed to create table.\n");
sqlsrv_free_stmt($stmt);
}
function AddCountry($conn, $tableName, $id, $country, $continent)
{
$query = "INSERT $tableName ([id], [country], [continent]) VALUES (?, ?, ?)";
// set parameters
$params = array($id, $country, $continent);
$stmt = sqlsrv_query( $conn, $query, $params);
if ($stmt)
echo "\nAdded $country in $continent with ID $id.";
else
FatalError("Failed to insert country $country.\n");
}
function UpdateID($conn, $tableName, $id, $country, $continent)
{
$query = "UPDATE $tableName SET id = ? WHERE country = ? AND continent = ?";
$param1 = $id;
$param2 = $country;
$param3 = $continent;
$params = array( &$param1, &$param2, &$param3);
if ($stmt = sqlsrv_prepare( $conn, $query, $params))
{
if (sqlsrv_execute($stmt))
echo "\nCountry $country now updated with new id $id.";
sqlsrv_free_stmt($stmt);
}
else
FatalError("Failed to update ID.\n");
}
function UpdateCountry($conn, $tableName, $id, $country, $continent)
{
$query = "UPDATE $tableName SET country = ? WHERE id = ? AND continent = ?";
$param1 = $country;
$param2 = $id;
$param3 = $continent;
$params = array( &$param1, &$param2, &$param3);
if ($stmt = sqlsrv_prepare( $conn, $query, $params))
{
if (sqlsrv_execute($stmt))
echo "\nThe country in $continent is now $country.";
sqlsrv_free_stmt($stmt);
}
else
FatalError("Failed to update country.\n");
}
function Fetch($conn, $tableName)
{
$select = "SELECT * FROM $tableName ORDER BY id";
$stmt = sqlsrv_query($conn, $select);
while ($country = sqlsrv_fetch_object($stmt, "Country"))
{
echo "\nID: " . $country->id . " ";
echo $country->getCountry() . ", ";
echo $country->getContinent();
}
sqlsrv_free_stmt($stmt);
}
//--------------------------------------------------------------------
// RunTest
//
//--------------------------------------------------------------------
function RunTest()
{
StartTest("sqlsrv_simple_update_variants");
try
{
set_time_limit(0);
sqlsrv_configure('WarningsReturnAsErrors', 1);
require_once("autonomous_setup.php");
$database = "tempdb";
// Connect
$connectionInfo = array("Database"=>$database, "UID"=>$username, "PWD"=>$password);
$conn = sqlsrv_connect($serverName, $connectionInfo);
if( !$conn ) { FatalError("Could not connect.\n"); }
// Create a temp table that will be automatically dropped once the connection is closed
$tableName = GetTempTableName();
CreateTable($conn, $tableName);
// Add three countries
AddCountry($conn, $tableName, 1, 'Canada', 'North America');
AddCountry($conn, $tableName, 3, 'France', 'Europe');
AddCountry($conn, $tableName, 5, 'Australia', 'Australia');
// Read data
Fetch($conn, $tableName);
// Update id
UpdateID($conn, $tableName, 4, 'Canada', 'North America');
// Read data
Fetch($conn, $tableName);
// Update country
UpdateCountry($conn, $tableName, 4, 'Mexico', 'North America');
// Read data
Fetch($conn, $tableName);
// Add two more countries
AddCountry($conn, $tableName, 6, 'Brazil', 'South America');
AddCountry($conn, $tableName, 2, 'Egypt', 'Africa');
// Read data
Fetch($conn, $tableName);
sqlsrv_close($conn);
}
catch (Exception $e)
{
echo $e->getMessage();
}
echo "\nDone\n";
EndTest("sqlsrv_simple_update_variants");
}
RunTest();
?>
--EXPECT--

...Starting 'sqlsrv_simple_update_variants' test...
Added Canada in North America with ID 1.
Added France in Europe with ID 3.
Added Australia in Australia with ID 5.
ID: 1 Canada, North America
ID: 3 France, Europe
ID: 5 Australia, Australia
Country Canada now updated with new id 4.
ID: 3 France, Europe
ID: 4 Canada, North America
ID: 5 Australia, Australia
The country in North America is now Mexico.
ID: 3 France, Europe
ID: 4 Mexico, North America
ID: 5 Australia, Australia
Added Brazil in South America with ID 6.
Added Egypt in Africa with ID 2.
ID: 2 Egypt, Africa
ID: 3 France, Europe
ID: 4 Mexico, North America
ID: 5 Australia, Australia
ID: 6 Brazil, South America
Done
...Test 'sqlsrv_simple_update_variants' completed successfully.