From 471da9b005545cf75b228cff04e684f54745842a Mon Sep 17 00:00:00 2001 From: yitam Date: Fri, 10 Feb 2017 13:21:53 -0800 Subject: [PATCH 1/3] Fix issue #35 --- source/pdo_sqlsrv/pdo_stmt.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/source/pdo_sqlsrv/pdo_stmt.cpp b/source/pdo_sqlsrv/pdo_stmt.cpp index d8b086a7..6adfbd0c 100644 --- a/source/pdo_sqlsrv/pdo_stmt.cpp +++ b/source/pdo_sqlsrv/pdo_stmt.cpp @@ -738,6 +738,10 @@ int pdo_sqlsrv_stmt_get_col_data(pdo_stmt_t *stmt, int colno, pdo_bound_param_data* bind_data = NULL; bind_data = reinterpret_cast(zend_hash_index_find_ptr(stmt->bound_columns, colno)); + if (bind_data == NULL) { + // can't find by index then try searching by name + bind_data = reinterpret_cast(zend_hash_find_ptr(stmt->bound_columns, stmt->columns[colno].name)); + } if( bind_data != NULL && !Z_ISUNDEF(bind_data->driver_params) ) { From 7ca80918ef018ba0de8c8645406c64f8a858899c Mon Sep 17 00:00:00 2001 From: yitam Date: Fri, 10 Feb 2017 14:28:33 -0800 Subject: [PATCH 2/3] add a simple test case with an input file --- test/pdo_sqlsrv/bike.jpg | Bin 0 -> 3853 bytes ...5_binary_encoding_error_bound_by_name.phpt | 89 ++++++++++++++++++ 2 files changed, 89 insertions(+) create mode 100644 test/pdo_sqlsrv/bike.jpg create mode 100644 test/pdo_sqlsrv/pdo_035_binary_encoding_error_bound_by_name.phpt diff --git a/test/pdo_sqlsrv/bike.jpg b/test/pdo_sqlsrv/bike.jpg new file mode 100644 index 0000000000000000000000000000000000000000..cc692c614fec32f1dfc432c8aa6824f553e834a1 GIT binary patch literal 3853 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 + + // Insert data using bind parameters + $sql = "INSERT INTO $tableName VALUES (?)"; + $stmt = $conn->prepare($sql); + $file = dirname(__FILE__)."/bike.jpg"; + $stream = fopen($file, "rb"); + $stmt->setAttribute(constant('PDO::SQLSRV_ATTR_ENCODING'), PDO::SQLSRV_ENCODING_BINARY); + $stmt->bindParam(1, $stream, PDO::PARAM_LOB); + $result = $stmt->execute(); + fclose($stream); + + // fetch it back + $stmt = $conn->prepare("SELECT Picture FROM $tableName"); + $stmt->execute(); + $stmt->bindColumn('Picture', $image, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); + $stmt->fetch(PDO::FETCH_BOUND); + + var_dump(CompareBinaryData($file, $image)); + + // Close connection + $stmt = null; + $conn = null; +} + +test(); + +print "Done"; +?> +--EXPECT-- +bool(true) +Done From bdbfaa7c6522c41cc7ae16b729a42808c5c4dbcb Mon Sep 17 00:00:00 2001 From: yitam Date: Tue, 14 Feb 2017 09:16:52 -0800 Subject: [PATCH 3/3] simplified the test without image input --- test/pdo_sqlsrv/bike.jpg | Bin 3853 -> 0 bytes ...5_binary_encoding_error_bound_by_name.phpt | 69 ++++-------------- 2 files changed, 15 insertions(+), 54 deletions(-) delete mode 100644 test/pdo_sqlsrv/bike.jpg diff --git a/test/pdo_sqlsrv/bike.jpg b/test/pdo_sqlsrv/bike.jpg deleted file mode 100644 index cc692c614fec32f1dfc432c8aa6824f553e834a1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3853 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 // Insert data using bind parameters $sql = "INSERT INTO $tableName VALUES (?)"; $stmt = $conn->prepare($sql); - $file = dirname(__FILE__)."/bike.jpg"; - $stream = fopen($file, "rb"); + $message = "This is to test github issue 35."; + $value = base64_encode($message); + $stmt->setAttribute(constant('PDO::SQLSRV_ATTR_ENCODING'), PDO::SQLSRV_ENCODING_BINARY); - $stmt->bindParam(1, $stream, PDO::PARAM_LOB); + $stmt->bindParam(1, $value, PDO::PARAM_LOB); $result = $stmt->execute(); - fclose($stream); // fetch it back - $stmt = $conn->prepare("SELECT Picture FROM $tableName"); + $stmt = $conn->prepare("SELECT Value FROM $tableName"); + $stmt->bindColumn('Value', $val1, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); $stmt->execute(); - $stmt->bindColumn('Picture', $image, PDO::PARAM_LOB, 0, PDO::SQLSRV_ENCODING_BINARY); $stmt->fetch(PDO::FETCH_BOUND); + var_dump($val1 === $value); - var_dump(CompareBinaryData($file, $image)); - + $stmt = $conn->query("DROP TABLE $tableName"); + // Close connection $stmt = null; $conn = null; } test(); - print "Done"; ?> --EXPECT-- bool(true) Done +