1--TEST-- 2Bug #45019 (Segmentation fault with SELECT ? and UNION) 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifemb.inc'); 7require_once('skipifconnectfailure.inc'); 8?> 9--FILE-- 10<?php 11 require_once("connect.inc"); 12 require_once("table.inc"); 13 14 // Regular (non-prepared) queries 15 print "Using CAST('somestring' AS CHAR)...\n"; 16 if (!($res = $link->query("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)"))) 17 printf("[001] [%d] %s\n", $link->errno, $link->error); 18 19 $data = array(); 20 while ($row = $res->fetch_assoc()) { 21 $data[] = $row['column1']; 22 var_dump($row['column1']); 23 } 24 $res->free(); 25 26 // Prepared Statements 27 if (!($stmt = $link->prepare("SELECT CAST('one' AS CHAR) AS column1 UNION SELECT CAST('three' AS CHAR) UNION SELECT CAST('two' AS CHAR)"))) 28 printf("[002] [%d] %s\n", $link->errno, $link->error); 29 30 $column1 = null; 31 if (!$stmt->bind_result($column1) || !$stmt->execute()) 32 printf("[003] [%d] %s\n", $stmt->errno, $stmt->error); 33 34 $index = 0; 35 while ($stmt->fetch()) { 36 /* NOTE: libmysql - http://bugs.mysql.com/bug.php?id=47483 */ 37 if ($data[$index] != $column1) { 38 if ($IS_MYSQLND || $index != 1) { 39 printf("[004] Row %d, expecting %s/%s got %s/%s\n", 40 $index + 1, gettype($data[$index]), $data[$index], gettype($column1), $column1); 41 } else { 42 if ($column1 != "thre") 43 printf("[005] Got '%s'. Please check if http://bugs.mysql.com/bug.php?id=47483 has been fixed and adapt tests bug45019.phpt/mysqli_ps_select_union.phpt", $column1); 44 } 45 } 46 $index++; 47 } 48 $stmt->close(); 49 50 $link->close(); 51 52 print "done!"; 53?> 54--EXPECTF-- 55Using CAST('somestring' AS CHAR)... 56%unicode|string%(3) "one" 57%unicode|string%(5) "three" 58%unicode|string%(3) "two" 59done! 60