bug_mysql_49406.phpt 3.5 KB

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