mysqli_real_connect.phpt 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. --TEST--
  2. mysqli_real_connect()
  3. --EXTENSIONS--
  4. mysqli
  5. --SKIPIF--
  6. <?php
  7. require_once('skipifconnectfailure.inc');
  8. ?>
  9. --INI--
  10. mysqli.allow_local_infile=1
  11. --FILE--
  12. <?php
  13. include("connect.inc");
  14. // ( mysqli link [, string hostname [, string username [, string passwd [, string dbname [, int port [, string socket [, int flags]]]]]]]
  15. if (!$link = mysqli_init())
  16. printf("[002] mysqli_init() failed\n");
  17. if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket))
  18. printf("[003] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
  19. $host, $user, $db, $port, $socket);
  20. mysqli_close($link);
  21. if (!$link = mysqli_init())
  22. printf("[004] mysqli_init() failed\n");
  23. if (false !== ($tmp = mysqli_real_connect($link, $host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket)))
  24. printf("[005] Expecting boolean/false got %s/%s. Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n", gettype($tmp), $tmp, $host, $user . 'unknown_really', $db, $port, $socket);
  25. // Run the following tests without an anoynmous MySQL user and use a password for the test user!
  26. ini_set('mysqli.default_socket', $socket);
  27. if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port)) {
  28. printf("[006] Usage of mysqli.default_socket failed\n");
  29. } else {
  30. mysqli_close($link);
  31. if (!$link = mysqli_init())
  32. printf("[007] mysqli_init() failed\n");
  33. }
  34. ini_set('mysqli.default_port', $port);
  35. if (!mysqli_real_connect($link, $host, $user, $passwd, $db)) {
  36. printf("[008] Usage of mysqli.default_port failed\n");
  37. } else {
  38. mysqli_close($link);
  39. if (!$link = mysqli_init())
  40. printf("[009] mysqli_init() failed\n");
  41. }
  42. ini_set('mysqli.default_pw', $passwd);
  43. if (!mysqli_real_connect($link, $host, $user)) {
  44. printf("[010] Usage of mysqli.default_pw failed\n") ;
  45. } else {
  46. mysqli_close($link);
  47. if (!$link = mysqli_init())
  48. printf("[011] mysqli_init() failed\n");
  49. }
  50. ini_set('mysqli.default_user', $user);
  51. if (!mysqli_real_connect($link, $host)) {
  52. printf("[012] Usage of mysqli.default_user failed\n") ;
  53. } else {
  54. mysqli_close($link);
  55. if (!$link = mysqli_init())
  56. printf("[011] mysqli_init() failed\n");
  57. }
  58. ini_set('mysqli.default_host', $host);
  59. if (!mysqli_real_connect($link)) {
  60. printf("[014] Usage of mysqli.default_host failed\n") ;
  61. } else {
  62. mysqli_close($link);
  63. if (!$link = mysqli_init())
  64. printf("[015] mysqli_init() failed\n");
  65. }
  66. // CLIENT_MULTI_STATEMENTS - should be disabled silently
  67. if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, 65536))
  68. printf("[016] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  69. if ($res = mysqli_query($link, "SELECT 1 AS a; SELECT 2 AS b")) {
  70. printf("[017] Should have failed. CLIENT_MULTI_STATEMENT should have been disabled.\n");
  71. var_dump($res->num_rows);
  72. mysqli_next_result($link);
  73. $res = mysqli_store_result($link);
  74. var_dump($res->num_rows);
  75. }
  76. mysqli_close($link);
  77. if (!$link = mysqli_init())
  78. printf("[018] mysqli_init() failed\n");
  79. if (ini_get('open_basedir')) {
  80. // CLIENT_LOCAL_FILES should be blocked - but how to test it ?!
  81. if (!mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket, 128))
  82. printf("[019] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  83. $filename = sys_get_temp_dir() . DIRECTORY_SEPARATOR . 'mysqli_real_connect_phpt';
  84. if (!$fp = fopen($filename, 'w'))
  85. printf("[020] Cannot open temporary file %s\n", $filename);
  86. fwrite($fp, '100;z');
  87. fclose($fp);
  88. // how do we test if gets forbidden because of a missing right or the flag, this test is partly bogus ?
  89. if (mysqli_query($link, "LOAD DATA LOCAL INFILE '$filename' INTO TABLE test FIELDS TERMINATED BY ';'"))
  90. printf("[021] LOAD DATA INFILE should have been forbidden!\n");
  91. unlink($filename);
  92. }
  93. mysqli_close($link);
  94. var_dump($link);
  95. if ($IS_MYSQLND) {
  96. ini_set('mysqli.default_host', 'p:' . $host);
  97. $link = mysqli_init();
  98. if (!@mysqli_real_connect($link)) {
  99. printf("[022] Usage of mysqli.default_host=p:%s (persistent) failed\n", $host) ;
  100. } else {
  101. if (!$res = mysqli_query($link, "SELECT 'mysqli.default_host (persistent)' AS 'testing'"))
  102. printf("[023] [%d] %s\n", mysqli_errno($link), mysqli_error($link));
  103. $tmp = mysqli_fetch_assoc($res);
  104. if ($tmp['testing'] !== 'mysqli.default_host (persistent)') {
  105. printf("[024] Result looks strange - check manually, [%d] %s\n",
  106. mysqli_errno($link), mysqli_error($link));
  107. var_dump($tmp);
  108. }
  109. mysqli_free_result($res);
  110. mysqli_close($link);
  111. }
  112. ini_set('mysqli.default_host', 'p:');
  113. $link = mysqli_init();
  114. if (@mysqli_real_connect($link)) {
  115. printf("[025] Usage of mysqli.default_host=p: did not fail\n") ;
  116. mysqli_close($link);
  117. }
  118. @mysqli_close($link);
  119. }
  120. try {
  121. mysqli_real_connect($link, $host, $user, $passwd, $db, $port, $socket);
  122. } catch (Error $exception) {
  123. echo $exception->getMessage() . "\n";
  124. }
  125. print "done!";
  126. ?>
  127. --CLEAN--
  128. <?php
  129. require_once("clean_table.inc");
  130. ?>
  131. --EXPECTF--
  132. Warning: mysqli_real_connect(): (%s/%d): Access denied for user '%s'@'%s' (using password: YES) in %s on line %d
  133. object(mysqli)#%d (%d) {
  134. ["client_info"]=>
  135. string(%d) "%s"
  136. ["client_version"]=>
  137. int(%d)
  138. ["connect_errno"]=>
  139. int(%d)
  140. ["connect_error"]=>
  141. NULL
  142. }
  143. mysqli object is already closed
  144. done!