summaryrefslogtreecommitdiff
path: root/ext/mysqli/tests/mysqli_connect_oo.phpt
blob: 36b66e694e95ddc74fe00408d27275e4fe697002 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
--TEST--
new mysqli()
--SKIPIF--
<?php
require_once('skipif.inc');
require_once('skipifemb.inc');
require_once('skipifconnectfailure.inc');
?>
--FILE--
<?php
	require_once("connect.inc");

	$tmp    = NULL;
	$link   = NULL;

	$obj = new stdClass();

	if ($mysqli = new mysqli($host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket) && !mysqli_connect_errno())
		printf("[003] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
			$host, $user . 'unknown_really', $db, $port, $socket);

	if (false !== $mysqli)
		printf("[004] Expecting boolean/false, got %s/%s\n", gettype($mysqli), $mysqli);

	// Run the following tests without an anoynmous MySQL user and use a password for the test user!
	ini_set('mysqli.default_socket', $socket);
	if (!is_object($mysqli = new mysqli($host, $user, $passwd, $db, $port)) || (0 !== mysqli_connect_errno())) {
		printf("[005] Usage of mysqli.default_socket failed\n") ;
	} else {
		$mysqli->close();
	}

	ini_set('mysqli.default_port', $port);
	if (!is_object($mysqli = new mysqli($host, $user, $passwd, $db)) || (0 !== mysqli_connect_errno())) {
		printf("[006] Usage of mysqli.default_port failed\n") ;
	} else {
		$mysqli->close();
	}

	ini_set('mysqli.default_pw', $passwd);
	if (!is_object($mysqli = new mysqli($host, $user)) || (0 !== mysqli_connect_errno())) {
		printf("[007] Usage of mysqli.default_pw failed\n") ;
	} else {
		$mysqli->close();
	}

	ini_set('mysqli.default_user', $user);
	if (!is_object($mysqli = new mysqli($host)) || (0 !== mysqli_connect_errno())) {
		printf("[008] Usage of mysqli.default_user failed\n") ;
	} else {
		$mysqli->close();
	}

	ini_set('mysqli.default_host', $host);
	if (!is_object($mysqli = new mysqli()) || (0 !== mysqli_connect_errno())) {
		printf("[012] Failed to create mysqli object\n");
	} else {
		// There shall be NO connection! Using new mysqli(void) shall not use defaults for a connection!
			// We had long discussions on this and found that the ext/mysqli API as
			// such is broken. As we can't fix it, we document how it has behaved from
			// the first day on. And that's: no connection.
			if (NULL !== ($tmp = @$mysqli->query('SELECT 1'))) {
				printf("[013] There shall be no connection!\n");
				$mysqli->close();
			}
	}

	if ($IS_MYSQLND) {
		ini_set('mysqli.default_host', 'p:' . $host);
		if (!is_object($mysqli = new mysqli())) {
			// Due to an API flaw this shall not connect
			printf("[010] Failed to create mysqli object\n");
		} else {
			// There shall be NO connection! Using new mysqli(void) shall not use defaults for a connection!
			// We had long discussions on this and found that the ext/mysqli API as
			// such is broken. As we can't fix it, we document how it has behaved from
			// the first day on. And that's: no connection.
			if (NULL !== ($tmp = @$mysqli->query('SELECT 1'))) {
				printf("[011] There shall be no connection!\n");
				$mysqli->close();
			}
		}
	}

	print "... and now Exceptions\n";
	mysqli_report(MYSQLI_REPORT_OFF);
	mysqli_report(MYSQLI_REPORT_STRICT);

	try {
		$mysqli = new mysqli($host, $user . 'unknown_really', $passwd . 'non_empty', $db, $port, $socket);
		printf("[016] Can connect to the server using host=%s, user=%s, passwd=***non_empty, dbname=%s, port=%s, socket=%s\n",
			$host, $user . 'unknown_really', $db, $port, $socket);
		$mysqli->close();
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
	}

	ini_set('mysqli.default_socket', $socket);
	try {
		$mysqli = new mysqli($host, $user, $passwd, $db, $port);
		$mysqli->close();
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
		printf("[017] Usage of mysqli.default_socket failed\n") ;
	}

	ini_set('mysqli.default_port', $port);
	try {
		$mysqli = new mysqli($host, $user, $passwd, $db);
		$mysqli->close();
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
		printf("[018] Usage of mysqli.default_port failed\n") ;
	}

	ini_set('mysqli.default_pw', $passwd);
	try {
		$mysqli = new mysqli($host, $user);
		$mysqli->close();
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
		printf("[019] Usage of mysqli.default_pw failed\n");
	}

	ini_set('mysqli.default_user', $user);
	try {
		$mysqli = new mysqli($host);
		$mysqli->close();
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
		printf("[020] Usage of mysqli.default_user failed\n") ;
	}

	ini_set('mysqli.default_host', $host);
	try {
		/* NOTE that at this point one must use a different syntax! */
		$mysqli = mysqli_init();
		$mysqli->real_connect();
		assert(0 === mysqli_connect_errno());
		$mysqli->close();
		assert(0 === mysqli_connect_errno());
	} catch (mysqli_sql_exception $e) {
		printf("%s\n", $e->getMessage());
		printf("[021] Usage of mysqli.default_host failed\n");
	}

	print "done!";
?>
--EXPECTF--
Warning: mysqli::__construct(): (%s/%d): Access denied for user '%sunknown%s'@'%s' (using password: %s) in %s on line %d
... and now Exceptions
Access denied for user '%s'@'%s' (using password: %s)
done!