Edit report at https://bugs.php.net/bug.php?id=62054&edit=1
ID: 62054 Comment by: s-php at ertel-net dot de Reported by: s-php at ertel-net dot de Summary: Column size is not reserved for all UNION Status: Feedback Type: Bug Package: MySQLi related Operating System: Ubuntu PHP Version: 5.3.13 Block user comment: N Private report: N New Comment: Sorry, column names changed. But I guess this should be no problem for you. mysql> PREPARE x from "SELECT 'read' AS Action FROM friends UNION SELECT CASE status WHEN 0 THEN 'request-received' WHEN 1 THEN 'confirmed' WHEN 2 THEN 'x' END AS Action FROM friends"; Query OK, 0 rows affected (0.00 sec) Statement prepared mysql> execute x; Field 1: `Action` Catalog: `def` Database: `` Table: `` Org_table: `` Type: VAR_STRING Collation: utf8_general_ci (33) Length: 48 Max_length: 16 Decimals: 0 Flags: +------------------+ | Action | +------------------+ | read | | confirmed | | request-received | | x | +------------------+ 4 rows in set (0.00 sec) Previous Comments: ------------------------------------------------------------------------ [2012-07-02 13:36:15] u...@php.net 99% sure: Server bug, not a client issue. Please, report column type information retrieved on the MySQL prompt when preparing the statement using SQL PREPARE and then executing it. Log in to the MySQL prompt using --column-type-info option to see the meta data reported by the server. ------------------------------------------------------------------------ [2012-05-17 13:28:21] s-php at ertel-net dot de Description: ------------ When I concatenate two queries with UNION an there are static strings in the queries, mysqli only reserves a big enough variable for the strings in the first query. If there are static strings in the other queries after the UNION, the strings are just cut off. Test script: --------------- $stmt = $this->mysqli->prepare("SELECT 'read' AS Action FROM tbl1 UNION SELECT CASE status WHEN 0 THEN 'request-received' WHEN 1 THEN 'confirmed' WHEN 2 THEN 'x' END AS Action FROM tbl2"); $stmt->bind_result($action); $stmt->execute(); while($stmt->fetch()) { echo $action . " "; } Expected result: ---------------- expected output is: read request-received confirmed Actual result: -------------- actual output is: read request-recei confirmed The "request-received" is cut off! ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=62054&edit=1