mysqli_select_db.phpt 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. --TEST--
  2. mysqli_select_db()
  3. --SKIPIF--
  4. <?php
  5. require_once('skipif.inc');
  6. require_once('skipifemb.inc');
  7. require_once('skipifconnectfailure.inc');
  8. ?>
  9. --FILE--
  10. <?php
  11. require_once("connect.inc");
  12. require_once("table.inc");
  13. $tmp = NULL;
  14. $link = NULL;
  15. if (!is_null($tmp = @mysqli_select_db()))
  16. printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
  17. if (!is_null($tmp = @mysqli_select_db($link)))
  18. printf("[002] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
  19. if (!$link = my_mysqli_connect($host, $user, $passwd, $db, $port, $socket))
  20. printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
  21. $host, $user, $db, $port, $socket);
  22. if (!is_null($tmp = @mysqli_select_db($link, $db, "foo")))
  23. printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
  24. /* does not make too much sense, unless we have access to at least one more database than $db */
  25. if (!mysqli_select_db($link, $db))
  26. printf("[005] Cannot select DB %s, [%d] %s\n", $db, mysqli_errno($link), mysqli_error($link));
  27. if (!$res = mysqli_query($link, "SELECT DATABASE() AS dbname"))
  28. printf("[006] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  29. if (!$row = mysqli_fetch_assoc($res))
  30. printf("[007] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  31. if ($row['dbname'] !== (string)$db)
  32. printf("[008] Expecting database '%s', found '%s'\n", $db, $row['dbname']);
  33. mysqli_free_result($res);
  34. if (mysqli_select_db($link, 'mysql')) {
  35. // Yippie, a second database to play with - that's great because mysqli_select_db
  36. // ($db) was done by mysqli__connect() already and the previous test
  37. // was quite useless
  38. if (!$res = mysqli_query($link, "SELECT DATABASE() AS dbname"))
  39. printf("[009] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  40. if (!$row = mysqli_fetch_assoc($res))
  41. printf("[010] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  42. if (strtolower($row['dbname']) !== 'mysql')
  43. printf("[011] Expecting database 'mysql', found '%s'\n", $row['dbname']);
  44. mysqli_free_result($res);
  45. }
  46. if (!$link->select_db($db))
  47. printf("[012] Failed to set '%s' as current DB; [%d] %s\n", $link->errno, $link->error);
  48. if (!$res = mysqli_query($link, "SELECT DATABASE() AS dbname"))
  49. printf("[013] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  50. if (!$row = mysqli_fetch_assoc($res))
  51. printf("[014] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  52. $current_db = $row['dbname'];
  53. mysqli_report(MYSQLI_REPORT_OFF);
  54. mysqli_select_db($link, 'I can not imagine that this database exists');
  55. mysqli_report(MYSQLI_REPORT_ERROR);
  56. ob_start();
  57. mysqli_select_db($link, 'I can not imagine that this database exists');
  58. $output = ob_get_contents();
  59. ob_end_clean();
  60. if (!stristr($output, "1049") && !stristr($output, "1044") && !stristr($output, "1045")) {
  61. /* Error: 1049 SQLSTATE: 42000 (ER_BAD_DB_ERROR) Message: Unknown database '%s' */
  62. /* Error: 1044 SQLSTATE: 42000 (ER_DBACCESS_DENIED_ERROR) Message: Access denied for user '%s'@'%s' to database '%s' */
  63. /* Error: 1045 SQLSTATE: 28000 (ER_ACCESS_DENIED_ERROR) Message: Access denied for user '%s'@'%s' (using password: %s) */
  64. echo $output;
  65. }
  66. if (!$res = mysqli_query($link, "SELECT DATABASE() AS dbname"))
  67. printf("[015] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  68. if (!$row = mysqli_fetch_assoc($res))
  69. printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  70. if (strtolower($row['dbname']) != strtolower($current_db))
  71. printf("[017] Current DB should not change if set fails\n");
  72. if (!$res = $link->query("SELECT id FROM test WHERE id = 1"))
  73. printf("[018] [%d] %s\n");
  74. $row = $res->fetch_assoc();
  75. $res->free();
  76. mysqli_close($link);
  77. if (NULL !== ($tmp = mysqli_select_db($link, $db)))
  78. printf("[017] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
  79. print "done!\n";
  80. ?>
  81. --CLEAN--
  82. <?php require_once("clean_table.inc"); ?>
  83. --EXPECTF--
  84. Warning: mysqli_select_db(): Couldn't fetch mysqli in %s on line %d
  85. done!