|
| 1 | +--TEST-- |
| 2 | +Verify Github Issue 1261 is fixed. |
| 3 | +--DESCRIPTION-- |
| 4 | +This test should already pass in Windows so it is mainly aimed for non-Windows settings where UTF-8 is the default encoding. ODBC warnings are handled differently with pdo_sqlsrv so logging is used to checking the warnings. |
| 5 | +--SKIPIF-- |
| 6 | +<?php require('skipif.inc'); ?> |
| 7 | +--FILE-- |
| 8 | +<?php |
| 9 | +require_once("MsSetup.inc"); |
| 10 | + |
| 11 | +try { |
| 12 | + $logFilename = 'php_errors.log'; |
| 13 | + $logFilepath = dirname(__FILE__).'/'.$logFilename; |
| 14 | + ini_set('log_errors', '1'); |
| 15 | + ini_set('pdo_sqlsrv.log_severity', '2'); |
| 16 | + ini_set('error_log', $logFilepath); |
| 17 | + |
| 18 | + $conn = new PDO("sqlsrv:Server=$server;Database=$databaseName;", $uid, $pwd); |
| 19 | + $conn->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_SYSTEM); |
| 20 | + $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); |
| 21 | + |
| 22 | + # leading string >= 2045 leading to result length > 2048 |
| 23 | + # column must be VARCHAR(MAX) or VARCHAR(2048) (starts working with bigger VARCHAR(n), e.g. 2060) |
| 24 | + # SQLSRV_ATTR_ENCODING must be set to SQLSRV_ENCODING_SYSTEM (works with PDO::SQLSRV_ENCODING_UTF8) |
| 25 | + # COLLATE must not be %UTF8% (e.g. Latin1_General_100_CI_AS_SC_UTF8 works) |
| 26 | + |
| 27 | + $sql = "DROP TABLE IF EXISTS #tmpTest; |
| 28 | + SET NOCOUNT ON; |
| 29 | + DECLARE @val VARCHAR(8000) = REPLICATE('a', 2045) + 'ñ'; |
| 30 | + CREATE TABLE #tmpTest (testCol VARCHAR(MAX) COLLATE SQL_Latin1_General_CP1_CI_AS); |
| 31 | + INSERT INTO #tmpTest (testCol) VALUES (@val); |
| 32 | + SELECT * from #tmpTest;"; |
| 33 | + |
| 34 | + $stmt = $conn->query($sql); |
| 35 | + $row = $stmt->fetch(PDO::FETCH_ASSOC); |
| 36 | + var_dump($row); |
| 37 | + |
| 38 | + echo file_get_contents($logFilepath); |
| 39 | + unlink($logFilepath); |
| 40 | + |
| 41 | + unset($stmt); |
| 42 | + unset($conn); |
| 43 | +} catch (PDOException $e) { |
| 44 | + var_dump($e); |
| 45 | +} |
| 46 | +?> |
| 47 | +--EXPECTF-- |
| 48 | +array(1) { |
| 49 | + ["testCol"]=> |
| 50 | + string(2049) "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaañ" |
| 51 | +} |
| 52 | +[%s] pdo_sqlsrv_db_handle_factory: SQLSTATE = 01000 |
| 53 | +[%s] pdo_sqlsrv_db_handle_factory: error code = 5701 |
| 54 | +[%s] pdo_sqlsrv_db_handle_factory: message = [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed database context to '%s'. |
| 55 | +[%s] pdo_sqlsrv_db_handle_factory: SQLSTATE = 01000 |
| 56 | +[%s] pdo_sqlsrv_db_handle_factory: error code = 5703 |
| 57 | +[%s] pdo_sqlsrv_db_handle_factory: message = [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Changed language setting to %s. |
| 58 | + |
0 commit comments