1--TEST-- 2MySQL Bug #49406 (Binding params doesn't work when selecting a date inside a CASE-WHEN, http://bugs.mysql.com/bug.php?id=49406) 3--SKIPIF-- 4<?php 5require_once('skipif.inc'); 6require_once('skipifconnectfailure.inc'); 7?> 8--FILE-- 9<?php 10 require_once("connect.inc"); 11 12 if (!($link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))) 13 printf("[001] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n", 14 $host, $user, $db, $port, $socket); 15 16 $query = "SELECT CASE WHEN 0 THEN CAST('2009-12-03' AS DATE) ELSE CAST('2009-12-03' AS DATE) END"; 17 18 if (!$res = $link->query($query)) 19 printf("[002] [%d] %s\n", $link->errno, $link->error); 20 21 if (!$row = $res->fetch_row()) 22 printf("[003] No result, [%d] %s\n", $link->errno, $link->error); 23 24 $res->free(); 25 26 if ($row[0] != '2009-12-03') { 27 printf("[004] Expecting '2009-12-03' got '%s'\n", $row[0]); 28 } 29 30 if (!$stmt = $link->prepare($query)) 31 printf("[005] [%d] %s\n", $link->errno, $link->error); 32 33 if (!$stmt->execute() || !$stmt->store_result()) 34 printf("[006] [%d] %s\n", $stmt->errno, $stmt->error); 35 36 37 $datatypes = array( 38 MYSQLI_TYPE_TINY => "TINY", 39 MYSQLI_TYPE_SHORT => "SHORT", 40 MYSQLI_TYPE_LONG => "LONG", 41 MYSQLI_TYPE_FLOAT => "FLOAT", 42 MYSQLI_TYPE_DOUBLE => "DOUBLE", 43 MYSQLI_TYPE_TIMESTAMP => "TIMESTAMP", 44 MYSQLI_TYPE_LONGLONG => "LONGLONG", 45 MYSQLI_TYPE_INT24 => "INT24", 46 MYSQLI_TYPE_DATE => "DATE", 47 MYSQLI_TYPE_TIME => "TIME", 48 MYSQLI_TYPE_DATETIME => "DATETIME", 49 MYSQLI_TYPE_YEAR => "YEAR", 50 MYSQLI_TYPE_ENUM => "ENUM", 51 MYSQLI_TYPE_SET => "SET", 52 MYSQLI_TYPE_TINY_BLOB => "TINYBLOB", 53 MYSQLI_TYPE_MEDIUM_BLOB => "MEDIUMBLOB", 54 MYSQLI_TYPE_LONG_BLOB => "LONGBLOB", 55 MYSQLI_TYPE_BLOB => "BLOB", 56 MYSQLI_TYPE_VAR_STRING => "VAR_STRING", 57 MYSQLI_TYPE_STRING => "STRING", 58 MYSQLI_TYPE_NULL => "NULL", 59 MYSQLI_TYPE_NEWDATE => "NEWDATE", 60 MYSQLI_TYPE_INTERVAL => "INTERVAL", 61 MYSQLI_TYPE_GEOMETRY => "GEOMETRY", 62 ); 63 64 $meta_res = $stmt->result_metadata(); 65 for ($field_idx = 0; $field_idx < $meta_res->field_count; $field_idx++) { 66 $field = $meta_res->fetch_field(); 67 printf("Field : %d\n", $field_idx); 68 printf("Name : %s\n", $field->name); 69 printf("Orgname : %s\n", $field->orgname); 70 printf("Table : %s\n", $field->table); 71 printf("Orgtable : %s\n", $field->orgtable); 72 printf("Maxlength : %d\n", $field->max_length); 73 printf("Length : %d\n", $field->length); 74 printf("Charsetnr : %d\n", $field->charsetnr); 75 printf("Flags : %d\n", $field->flags); 76 printf("Type : %d (%s)\n", $field->type, (isset($datatypes[$field->type])) ? $datatypes[$field->type] : 'unknown'); 77 printf("Decimals : %d\n", $field->decimals); 78 } 79 80 $row_stmt = null; 81 if (!$stmt->bind_result($row_stmt) || !$stmt->fetch()) 82 printf("[007] [%d] %s\n", $stmt->errno, $stmt->error); 83 84 if ($row[0] != $row_stmt) { 85 printf("[008] PS and non-PS results differ, dumping data\n"); 86 var_dump($row[0]); 87 var_dump($row_stmt); 88 } 89 90 $stmt->close(); 91 $link->close(); 92 93 echo "done"; 94?> 95--EXPECTF-- 96Field : %s 97Name : %s 98Orgname :%s 99Table :%s 100Orgtable :%s 101Maxlength : %d 102Length : %d 103Charsetnr : %d 104Flags : %d 105Type : %d (%s) 106Decimals : %d 107done 108