1--TEST-- 2GH-11587 PHP8.1: Fixed the condition for result set values to be of native type, making it compatible with previous versions. #11622 3--EXTENSIONS-- 4pdo_mysql 5--SKIPIF-- 6<?php 7require_once __DIR__ . '/inc/mysql_pdo_test.inc'; 8MySQLPDOTest::skip(); 9MySQLPDOTest::skipNotMySQLnd(); 10?> 11--FILE-- 12<?php 13require_once __DIR__ . '/inc/mysql_pdo_test.inc'; 14$db = MySQLPDOTest::factory(); 15 16$createTestTable = <<<SQL 17CREATE TABLE test_11587( 18 id INT, 19 `float_col` FLOAT(3,2) DEFAULT NULL, 20 `double_col` DOUBLE(3,2) DEFAULT NULL, 21 `decimal_col` DECIMAL(3,2) DEFAULT NULL 22) 23SQL; 24 25$db->exec($createTestTable); 26 27$insertTestTable = <<<SQL 28INSERT INTO test_11587(id, float_col, double_col, decimal_col) VALUES(1, 2.60, 3.60, 4.60) 29SQL; 30 31$db->exec($insertTestTable); 32 33echo "PDO::ATTR_EMULATE_PREPARES = true, PDO::ATTR_STRINGIFY_FETCHES = true\n"; 34$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 35$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); 36$results = $db->query('SELECT * FROM test_11587'); 37foreach ($results as $result) { 38 var_dump($result); 39} 40 41echo "\n"; 42 43echo "PDO::ATTR_EMULATE_PREPARES = true, PDO::ATTR_STRINGIFY_FETCHES = false\n"; 44$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, true); 45$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); 46$results = $db->query('SELECT * FROM test_11587'); 47foreach ($results as $result) { 48 var_dump($result); 49} 50 51echo "\n"; 52 53echo "PDO::ATTR_EMULATE_PREPARES = false, PDO::ATTR_STRINGIFY_FETCHES = true\n"; 54$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 55$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); 56$results = $db->query('SELECT * FROM test_11587'); 57foreach ($results as $result) { 58 var_dump($result); 59} 60 61echo "\n"; 62 63echo "PDO::ATTR_EMULATE_PREPARES = false, PDO::ATTR_STRINGIFY_FETCHES = false\n"; 64$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); 65$db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); 66$results = $db->query('SELECT * FROM test_11587'); 67foreach ($results as $result) { 68 var_dump($result); 69} 70 71echo "\n"; 72 73echo 'done!'; 74?> 75--CLEAN-- 76<?php 77require_once __DIR__ . '/inc/mysql_pdo_test.inc'; 78$db = MySQLPDOTest::factory(); 79$db->exec('DROP TABLE IF EXISTS test_11587'); 80?> 81--EXPECT-- 82PDO::ATTR_EMULATE_PREPARES = true, PDO::ATTR_STRINGIFY_FETCHES = true 83array(8) { 84 ["id"]=> 85 string(1) "1" 86 [0]=> 87 string(1) "1" 88 ["float_col"]=> 89 string(4) "2.60" 90 [1]=> 91 string(4) "2.60" 92 ["double_col"]=> 93 string(4) "3.60" 94 [2]=> 95 string(4) "3.60" 96 ["decimal_col"]=> 97 string(4) "4.60" 98 [3]=> 99 string(4) "4.60" 100} 101 102PDO::ATTR_EMULATE_PREPARES = true, PDO::ATTR_STRINGIFY_FETCHES = false 103array(8) { 104 ["id"]=> 105 int(1) 106 [0]=> 107 int(1) 108 ["float_col"]=> 109 float(2.6) 110 [1]=> 111 float(2.6) 112 ["double_col"]=> 113 float(3.6) 114 [2]=> 115 float(3.6) 116 ["decimal_col"]=> 117 string(4) "4.60" 118 [3]=> 119 string(4) "4.60" 120} 121 122PDO::ATTR_EMULATE_PREPARES = false, PDO::ATTR_STRINGIFY_FETCHES = true 123array(8) { 124 ["id"]=> 125 string(1) "1" 126 [0]=> 127 string(1) "1" 128 ["float_col"]=> 129 string(3) "2.6" 130 [1]=> 131 string(3) "2.6" 132 ["double_col"]=> 133 string(3) "3.6" 134 [2]=> 135 string(3) "3.6" 136 ["decimal_col"]=> 137 string(4) "4.60" 138 [3]=> 139 string(4) "4.60" 140} 141 142PDO::ATTR_EMULATE_PREPARES = false, PDO::ATTR_STRINGIFY_FETCHES = false 143array(8) { 144 ["id"]=> 145 int(1) 146 [0]=> 147 int(1) 148 ["float_col"]=> 149 float(2.6) 150 [1]=> 151 float(2.6) 152 ["double_col"]=> 153 float(3.6) 154 [2]=> 155 float(3.6) 156 ["decimal_col"]=> 157 string(4) "4.60" 158 [3]=> 159 string(4) "4.60" 160} 161 162done! 163