1--TEST-- 2PDO::ATTR_ORACLE_NULLS 3--SKIPIF-- 4<?php 5require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc'); 6require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); 7MySQLPDOTest::skip(); 8?> 9--FILE-- 10<?php 11 require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); 12 $db = MySQLPDOTest::factory(); 13 MySQLPDOTest::createTestTable($db); 14 15 try { 16 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, []); 17 } catch (\TypeError $e) { 18 echo $e->getMessage(), \PHP_EOL; 19 } 20 try { 21 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, new stdClass()); 22 } catch (\TypeError $e) { 23 echo $e->getMessage(), \PHP_EOL; 24 } 25 try { 26 /* Currently passes... */ 27 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 'pdo'); 28 } catch (\TypeError $e) { 29 echo $e->getMessage(), \PHP_EOL; 30 } 31 32 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); 33 $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); 34 var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 35 36 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 0); 37 $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); 38 var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 39 40 $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); 41 $stmt = $db->query('SELECT VERSION() as _version'); 42 $row = $stmt->fetch(PDO::FETCH_ASSOC); 43 if ((int)strtok($row['_version'], '.') >= 5) 44 $have_procedures = true; 45 else 46 $have_procedures = false; 47 48 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); 49 $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); 50 51 if ($have_procedures && (false !== $db->exec('DROP PROCEDURE IF EXISTS p')) && 52 (false !== $db->exec("CREATE PROCEDURE p() BEGIN SELECT NULL as z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, ' e' AS e; END;"))) { 53 // requires MySQL 5+ 54 $stmt = $db->prepare('CALL p()'); 55 $stmt->execute(); 56 do { 57 var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 58 } while ($stmt->nextRowset()); 59 60 $stmt->execute(); 61 do { 62 var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); 63 } while ($stmt->nextRowset()); 64 65 } 66 67 if ($have_procedures) 68 @$db->exec('DROP PROCEDURE IF EXISTS p'); 69 70 print "done!"; 71?> 72--EXPECTF-- 73Attribute value must be of type int for selected attribute, array given 74Attribute value must be of type int for selected attribute, stdClass given 75array(1) { 76 [0]=> 77 array(6) { 78 ["z"]=> 79 NULL 80 ["a"]=> 81 NULL 82 ["b"]=> 83 string(1) " " 84 ["c"]=> 85 NULL 86 ["d"]=> 87 string(2) " d" 88 ["e"]=> 89 string(3) "%se" 90 } 91} 92array(1) { 93 [0]=> 94 array(6) { 95 ["z"]=> 96 NULL 97 ["a"]=> 98 string(0) "" 99 ["b"]=> 100 string(1) " " 101 ["c"]=> 102 string(0) "" 103 ["d"]=> 104 string(2) " d" 105 ["e"]=> 106 string(3) "%se" 107 } 108} 109array(1) { 110 [0]=> 111 array(6) { 112 ["z"]=> 113 NULL 114 ["a"]=> 115 string(0) "" 116 ["b"]=> 117 string(1) " " 118 ["c"]=> 119 string(0) "" 120 ["d"]=> 121 string(2) " d" 122 ["e"]=> 123 string(2) " e" 124 } 125} 126array(0) { 127} 128array(1) { 129 [0]=> 130 array(6) { 131 ["z"]=> 132 NULL 133 ["a"]=> 134 string(0) "" 135 ["b"]=> 136 string(1) " " 137 ["c"]=> 138 string(0) "" 139 ["d"]=> 140 string(2) " d" 141 ["e"]=> 142 string(2) " e" 143 } 144} 145array(0) { 146} 147done! 148