From 82527c743ccacfd105a8f9cfe14b3246e15168cf Mon Sep 17 00:00:00 2001 From: yitam Date: Wed, 3 May 2017 09:41:25 -0700 Subject: [PATCH] more tests for pdo --- test/pdo_sqlsrv/pdo_construct_dsn_error.phpt | 14 +-- .../pdo_prepare_emulatePrepare_binary.phpt | 86 ++++++++++++++ .../pdo_prepare_emulatePrepare_char.phpt | 108 +++++++++++++++++ .../pdo_prepare_emulatePrepare_datetime.phpt | 107 +++++++++++++++++ .../pdo_prepare_emulatePrepare_decimal.phpt | 111 ++++++++++++++++++ .../pdo_prepare_emulatePrepare_float.phpt | 111 ++++++++++++++++++ .../pdo_prepare_emulatePrepare_int.phpt | 108 +++++++++++++++++ .../pdo_prepare_emulatePrepare_money.phpt | 111 ++++++++++++++++++ .../pdo_prepare_emulatePrepare_unicode.phpt | 109 +++++++++++++++++ test/setup/exec_sql_scripts.py | 4 +- 10 files changed, 861 insertions(+), 8 deletions(-) create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt create mode 100644 test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt diff --git a/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt b/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt index 1599fff3..003f3a1d 100644 --- a/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt +++ b/test/pdo_sqlsrv/pdo_construct_dsn_error.phpt @@ -21,7 +21,7 @@ catch( PDOException $e ) { //dsn with double right curly braces try { - $conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName}}", $uid, $pwd ); + $conn = new PDO( "sqlsrv:Server =$server; database = {tempdb}}", $uid, $pwd ); } catch( PDOException $e ) { print_r( ($e->errorInfo)[2] ); @@ -31,7 +31,7 @@ catch( PDOException $e ) { //dsn with double right curly braces and semicolon try { - $conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName}};", $uid, $pwd ); + $conn = new PDO( "sqlsrv:Server =$server; database = {tempdb}};", $uid, $pwd ); } catch( PDOException $e ) { print_r( ($e->errorInfo)[2] ); @@ -41,7 +41,7 @@ catch( PDOException $e ) { //dsn with right curly braces and other symbol try { - $conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName}?", $uid, $pwd ); + $conn = new PDO( "sqlsrv:Server =$server; database = {tempdb}?", $uid, $pwd ); } catch( PDOException $e ) { print_r( ($e->errorInfo)[2] ); @@ -71,7 +71,7 @@ catch( PDOException $e ) { // Try to connect with no server specified try { - $databaseName = "$databaseName"; + $databaseName = "tempdb"; @$conn = new PDO( "sqlsrv:database = $databaseName", $uid, $pwd ); } catch( PDOException $e ) { @@ -85,15 +85,15 @@ echo "\n"; try { //dsn with curly braces - $conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName}", $uid, $pwd ); + $conn = new PDO( "sqlsrv:Server =$server; database = {tempdb}", $uid, $pwd ); echo "value in curly braces OK\n"; //dsn with curly braces and semicolon - @$conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName};", $uid, $pwd ); + @$conn = new PDO( "sqlsrv:Server =$server; database = {tempdb};", $uid, $pwd ); echo "value in curly braces followed by a semicolon OK\n"; //dsn with curly braces and trailing spaces - @$conn = new PDO( "sqlsrv:Server =$server; database = {$databaseName} ", $uid, $pwd ); + @$conn = new PDO( "sqlsrv:Server =$server; database = {tempdb} ", $uid, $pwd ); echo "value in curly braces followed by trailing spaces OK\n"; //dsn with no value specified and ends with semicolon diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt new file mode 100644 index 00000000..5e934ef5 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_binary.phpt @@ -0,0 +1,86 @@ +--TEST-- +prepare with emulate prepare and binding binary parameters +--SKIPIF-- + +--FILE-- +prepare('DROP TABLE TESTTABLE'); + $st->execute(); +} +catch(Exception $e) {} + +//Recreate +$st = $cnn->prepare('CREATE TABLE TESTTABLE ([COLA] varbinary(max))'); +$st->execute(); + +$p = fopen('php://memory', 'a'); +fwrite($p, 'asdgasdgasdgsadg'); +rewind($p); + +//WORKS OK without emulate prepare +print_r("Prepare without emulate prepare:\n"); +$st = $cnn->prepare('INSERT INTO TESTTABLE VALUES(:p0)', $pdo_options); +$st->bindParam(':p0', $p, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); +$st->execute(); + +$st = $cnn->prepare('SELECT TOP 1 * FROM TESTTABLE', $pdo_options); +$st->execute(); +$value = $st->fetch(PDO::FETCH_ASSOC); +print_r($value); + +//EMULATE PREPARE with SQLSRV_ENCODING_BINARY +$pdo_options[PDO::ATTR_EMULATE_PREPARES] = TRUE; +print_r("Prepare with emulate prepare and set encoding to binary:\n"); +$st = $cnn->prepare('INSERT INTO TESTTABLE VALUES(:p0)', $pdo_options); +$st->bindParam(':p0', $p, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); +$st->execute(); + +$st = $cnn->prepare('SELECT * FROM TESTTABLE', $pdo_options); +$st->execute(); +$value = $st->fetch(PDO::FETCH_ASSOC); +print_r($value); + +//EMULATE PREPARE with no bind param options +print_r("Prepare with emulate prepare and no bindparam options:\n"); +$st = $cnn->prepare('INSERT INTO TESTTABLE VALUES(:p0)', $pdo_options); +$st->bindParam(':p0', $p, PDO::PARAM_LOB); +$st->execute(); + +$st = $cnn->prepare('SELECT * FROM TESTTABLE', $pdo_options); +$st->execute(); +$value = $st->fetch(PDO::FETCH_ASSOC); +print_r($value); + +$st = null; +$cnn = null; +?> +--EXPECTREGEX-- +Prepare without emulate prepare: +Array +\( + \[COLA\] => asdgasdgasdgsadg +\) +Prepare with emulate prepare and set encoding to binary: +Array +\( + \[COLA\] => asdgasdgasdgsadg +\) +Prepare with emulate prepare and no bindparam options: + +Fatal error: Uncaught PDOException: SQLSTATE\[42000\]: \[Microsoft\]\[ODBC Driver 1[0-9] for SQL Server\]\[SQL Server\]Implicit conversion from data type varchar to varbinary\(max\) is not allowed\. Use the CONVERT function to run this query\. in .+(\/|\\)pdo_prepare_emulatePrepare_binary\.php:[0-9]+ +Stack trace: +#0 .+(\/|\\)pdo_prepare_emulatePrepare_binary\.php\([0-9]+\): PDOStatement->execute\(\) +#1 {main} + thrown in .+(\/|\\)pdo_prepare_emulatePrepare_binary\.php on line [0-9]+ \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt new file mode 100644 index 00000000..595afca2 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_char.phpt @@ -0,0 +1,108 @@ +--TEST-- +prepare with emulate prepare and binding varchar +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (name varchar(max), calories int)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('apple', 150)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('banana', 175)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('blueberry', 1)"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE name = :name"; + +//prepare without emulate prepare +print_r("Prepare without emulate prepare:\n"); +$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false)); +$name = 'blueberry'; +$stmt->bindParam(':name', $name); +$stmt->execute(); +$row = $stmt->fetch( PDO::FETCH_ASSOC ); +print_r($row); + +//prepare 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)); +$name = 'blueberry'; +$stmt->bindParam(':name', $name); +$stmt->execute(); +$row = $stmt->fetch( PDO::FETCH_ASSOC ); +print_r($row); + +//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)); +$name = 'blueberry'; +$stmt->bindParam(':name', $name, 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 and SQLSRV_ENCODING_SYSTEM:\n"); +$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true)); +$name = 'blueberry'; +$stmt->bindParam(':name', $name, 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 encoding SQLSRV_ENCODING_BINARY:\n"); +$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => true)); +$name = 'blueberry'; +$stmt->bindParam(':name', $name, PDO::PARAM_STR, 0, PDO::SQLSRV_ENCODING_BINARY); +$stmt->execute(); +$row = $stmt->fetch( PDO::FETCH_ASSOC ); +print_r($row); + +$stmt = null; +$conn=null; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [name] => blueberry + [calories] => 1 +) +Prepare with emulate prepare and no bindParam options: +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 +) \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt new file mode 100644 index 00000000..1520ecb5 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_datetime.phpt @@ -0,0 +1,107 @@ +--TEST-- +prepare with emulate prepare and binding integer +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (c1_datetime datetime, c2_nvarchar nvarchar(20))"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_datetime, c2_nvarchar) VALUES ('2012-06-18 10:34:09', N'2012-06-18 10:34:09')"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_datetime, c2_nvarchar) VALUES ('2008-11-11 13:23:44', N'2008-11-11 13:23:44')"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_datetime, c2_nvarchar) VALUES ('2012-09-25 19:47:00', N'2012-09-25 19:47:00')"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE c1_datetime = :c1"; + +// prepare without emulate prepare +print_r("Prepare without emulate prepare:\n"); +$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false)); +$c1 = '2012-09-25 19:47:00'; +$stmt->bindParam(':c1', $c1); +$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)); +$c1 = '2012-09-25 19:47:00'; +$stmt->bindParam(':c1', $c1); +$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)); +$c1 = '2012-09-25 19:47:00'; +$stmt->bindParam(':c1', $c1, 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)); +$c1 = '2012-09-25 19:47:00'; +$stmt->bindParam(':c1', $c1, 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)); +$c1 = '2012-09-25 19:47:00'; +$stmt->bindParam(':c1', $c1, 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; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [c1_datetime] => 2012-09-25 19:47:00.000 + [c2_nvarchar] => 2012-09-25 19:47:00 +) +Prepare with emulate prepare and no bind param options: +Array +( + [c1_datetime] => 2012-09-25 19:47:00.000 + [c2_nvarchar] => 2012-09-25 19:47:00 +) +Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM: +Array +( + [c1_datetime] => 2012-09-25 19:47:00.000 + [c2_nvarchar] => 2012-09-25 19:47:00 +) +Prepare with emulate prepare and SQLSRV_ENCODING_UTF8: +Array +( + [c1_datetime] => 2012-09-25 19:47:00.000 + [c2_nvarchar] => 2012-09-25 19:47:00 +) +Prepare with emulate prepare and SQLSRV_ENCODING_BINARY: +No results for this query \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt new file mode 100644 index 00000000..75db05df --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_decimal.phpt @@ -0,0 +1,111 @@ +--TEST-- +prepare with emulate prepare and binding integer +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (c1_decimal decimal, c2_money money, c3_float float)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (411.1, 131.11, 611.111)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (422.2222, 132.222, 622.22)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (433.333, 133.3333, 633.33333 )"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE c1_decimal = :c1"; + +// prepare without emulate prepare +print_r("Prepare without emulate prepare:\n"); +$stmt = $conn->prepare($query, array(PDO::ATTR_EMULATE_PREPARES => false)); +$c1 = 422.2222; +$stmt->bindParam(':c1', $c1); +$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)); +$c1 = 422.2222; +$stmt->bindParam(':c1', $c1 ); +$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)); +$c1 = 422.2222; +$stmt->bindParam(':c1', $c1, 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)); +$c1 = 422.2222; +$stmt->bindParam(':c1', $c1, 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)); +$c1 = 422.2222; +$stmt->bindParam(':c1', $c1, 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; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [c1_decimal] => 422 + [c2_money] => 132.2220 + [c3_float] => 622.22000000000003 +) +Prepare with emulate prepare and no bind param options: +Array +( + [c1_decimal] => 422 + [c2_money] => 132.2220 + [c3_float] => 622.22000000000003 +) +Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM: +Array +( + [c1_decimal] => 422 + [c2_money] => 132.2220 + [c3_float] => 622.22000000000003 +) +Prepare with emulate prepare and SQLSRV_ENCODING_UTF8: +Array +( + [c1_decimal] => 422 + [c2_money] => 132.2220 + [c3_float] => 622.22000000000003 +) +Prepare with emulate prepare and SQLSRV_ENCODING_BINARY: +No results for this query \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt new file mode 100644 index 00000000..d474ccef --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_float.phpt @@ -0,0 +1,111 @@ +--TEST-- +prepare with emulate prepare and binding integer +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (c1_decimal decimal, c2_money money, c3_float float)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (411.1, 131.11, 611.111)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (422.2222, 132.222, 622.22)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (433.333, 133.3333, 633.33333 )"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE c3_float = :c3"; + +// 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); + +//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){ + print_r("No results for this query\n"); +} + +$stmt = null; +$conn=null; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [c1_decimal] => 411 + [c2_money] => 131.1100 + [c3_float] => 611.11099999999999 +) +Prepare with emulate prepare and no bind param options: +Array +( + [c1_decimal] => 411 + [c2_money] => 131.1100 + [c3_float] => 611.11099999999999 +) +Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM: +Array +( + [c1_decimal] => 411 + [c2_money] => 131.1100 + [c3_float] => 611.11099999999999 +) +Prepare with emulate prepare and SQLSRV_ENCODING_UTF8: +Array +( + [c1_decimal] => 411 + [c2_money] => 131.1100 + [c3_float] => 611.11099999999999 +) +Prepare with emulate prepare and SQLSRV_ENCODING_BINARY: +No results for this query \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt new file mode 100644 index 00000000..90924959 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_int.phpt @@ -0,0 +1,108 @@ +--TEST-- +prepare with emulate prepare and binding integer +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (name varchar(max), calories int)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('apple', 150)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('banana', 175)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (name, calories) VALUES ('blueberry', 1)"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE calories = :cal"; + +// 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 +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_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); + +//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; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [name] => blueberry + [calories] => 1 +) +Prepare with emulate prepare and no bindParam options: +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 +) \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt new file mode 100644 index 00000000..80edf7c7 --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_money.phpt @@ -0,0 +1,111 @@ +--TEST-- +prepare with emulate prepare and binding integer +--SKIPIF-- + +--FILE-- +query($query); + +$query = "CREATE TABLE [$tableName] (c1_decimal decimal, c2_money money, c3_float float)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (411.1, 131.11, 611.111)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (422.2222, 132.222, 622.22)"; +$stmt = $conn->query($query); + +$query = "INSERT INTO [$tableName] (c1_decimal, c2_money, c3_float) VALUES (433.333, 133.3333, 633.33333 )"; +$stmt = $conn->query($query); + +$query = "SELECT * FROM [$tableName] WHERE c2_money = :c2"; + +// 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); + +//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){ + print_r("No results for this query\n"); +} + +$stmt = null; +$conn=null; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [c1_decimal] => 433 + [c2_money] => 133.3333 + [c3_float] => 633.33333000000005 +) +Prepare with emulate prepare and no bind param options: +Array +( + [c1_decimal] => 433 + [c2_money] => 133.3333 + [c3_float] => 633.33333000000005 +) +Prepare with emulate prepare and SQLSRV_ENCODING_SYSTEM: +Array +( + [c1_decimal] => 433 + [c2_money] => 133.3333 + [c3_float] => 633.33333000000005 +) +Prepare with emulate prepare and SQLSRV_ENCODING_UTF8: +Array +( + [c1_decimal] => 433 + [c2_money] => 133.3333 + [c3_float] => 633.33333000000005 +) +Prepare with emulate prepare and SQLSRV_ENCODING_BINARY: +No results for this query \ No newline at end of file diff --git a/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt new file mode 100644 index 00000000..5414e59c --- /dev/null +++ b/test/pdo_sqlsrv/pdo_prepare_emulatePrepare_unicode.phpt @@ -0,0 +1,109 @@ +--TEST-- +prepare with emulate prepare and binding uft8 characters +--SKIPIF-- + +--FILE-- +setAttribute( PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION ); +//$conn->setAttribute( PDO::SQLSRV_ATTR_QUERY_TIMEOUT, 1 ); + +$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"); +} + +//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); + +//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){ + 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){ + print_r("No results for this query\n"); +} + +//$query = "DROP TABLE [$tableName]"; +//$stmt = $conn->query($query); + +$stmt = null; +$conn=null; +?> + +--EXPECT-- +Prepare without emulate prepare: +Array +( + [name] => 가각 + [status] => 1 + [age] => 30 +) +Prepare with emulate prepare and no bindParam options: +No results for this query +Prepare with emulate prepare and SQLSRV_ENCODING_UTF8: +Array +( + [name] => 가각 + [status] => 1 + [age] => 30 +) +Prepare with emulate prepare and and SQLSRV_ENCODING_SYSTEM: +No results for this query +Prepare with emulate prepare and encoding SQLSRV_ENCODING_BINARY: +No results for this query \ No newline at end of file diff --git a/test/setup/exec_sql_scripts.py b/test/setup/exec_sql_scripts.py index 5fff3c9e..80895588 100644 --- a/test/setup/exec_sql_scripts.py +++ b/test/setup/exec_sql_scripts.py @@ -35,7 +35,9 @@ def executeSQLscriptUnix(sqlfile, conn_options, dbname): simple_cmd = 'sqlcmd ' + conn_options + ' -Q \"select @@Version\" ' executeCommmand(simple_cmd) - inst_command = redirect_string.format(dbname, sqlfile, tmpFileName) + sqlcmd + # inst_command = redirect_string.format(dbname, sqlfile, tmpFileName) + sqlcmd + inst_command = redirect_string.format(dbname, sqlfile, tmpFileName) executeCommmand(inst_command) + executeCommmand(sqlcmd) os.remove(tmpFileName)