1--TEST--
2mysqli_fetch_object()
3--SKIPIF--
4<?php
5require_once('skipif.inc');
6require_once('skipifemb.inc');
7require_once('skipifconnectfailure.inc');
8?>
9--FILE--
10<?php
11	require_once("connect.inc");
12
13	$tmp    = NULL;
14	$link   = NULL;
15
16	$mysqli = new mysqli();
17	$res = @new mysqli_result($mysqli);
18	if (!is_null($tmp = @$res->fetch_object()))
19		printf("[001] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
20
21	require('table.inc');
22	if (!$mysqli = new my_mysqli($host, $user, $passwd, $db, $port, $socket))
23		printf("[002] Cannot connect to the server using host=%s, user=%s, passwd=***, dbname=%s, port=%s, socket=%s\n",
24			$host, $user, $db, $port, $socket);
25
26	if (!$res = $mysqli->query("SELECT id AS ID, label FROM test AS TEST ORDER BY id LIMIT 5")) {
27		printf("[003] [%d] %s\n", $mysqli->errno, $mysqli->error);
28	}
29
30	if (!is_null($tmp = @$res->fetch_object($link)))
31		printf("[004] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
32
33	if (!is_null($tmp = @$res->fetch_object($link, $link)))
34		printf("[005] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
35
36	if (!is_null($tmp = @$res->fetch_object($link, $link, $link)))
37		printf("[006] Expecting NULL, got %s/%s\n", gettype($tmp), $tmp);
38
39	$obj = mysqli_fetch_object($res);
40	if (($obj->ID !== "1") || ($obj->label !== "a") || (get_class($obj) != 'stdClass')) {
41		printf("[007] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error);
42		var_dump($obj);
43	}
44
45	class mysqli_fetch_object_test {
46
47		public $a = null;
48		public $b = null;
49
50		public function toString() {
51			var_dump($this);
52		}
53	}
54
55	$obj = $res->fetch_object('mysqli_fetch_object_test');
56	if (($obj->ID !== "2") || ($obj->label !== "b") || ($obj->a !== NULL) || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_test')) {
57		printf("[008] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error);
58		var_dump($obj);
59	}
60
61	class mysqli_fetch_object_construct extends mysqli_fetch_object_test {
62
63		public function __construct($a, $b) {
64			$this->a = $a;
65			$this->b = $b;
66		}
67
68	}
69
70	$obj = $res->fetch_object('mysqli_fetch_object_construct', null);
71
72	if (($obj->ID !== "3") || ($obj->label !== "c") || ($obj->a !== NULL) || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_construct')) {
73		printf("[009] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error);
74		var_dump($obj);
75	}
76
77	$obj = $res->fetch_object('mysqli_fetch_object_construct', array('a'));
78	if (($obj->ID !== "4") || ($obj->label !== "d") || ($obj->a !== 'a') || ($obj->b !== NULL) || (get_class($obj) != 'mysqli_fetch_object_construct')) {
79		printf("[010] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error);
80		var_dump($obj);
81	}
82
83	$obj = $res->fetch_object('mysqli_fetch_object_construct', array('a', 'b'));
84	if (($obj->ID !== "5") || ($obj->label !== "e") || ($obj->a !== 'a') || ($obj->b !== 'b') || (get_class($obj) != 'mysqli_fetch_object_construct')) {
85		printf("[011] Object seems wrong. [%d] %s\n", $mysqli->errno, $mysqli->error);
86		var_dump($obj);
87	}
88
89	var_dump($res->fetch_object('mysqli_fetch_object_construct', array('a', 'b', 'c')));
90	var_dump(mysqli_fetch_object($res));
91
92	mysqli_free_result($res);
93
94	if (!$res = mysqli_query($link, "SELECT id AS ID, label FROM test AS TEST")) {
95		printf("[012] [%d] %s\n", $mysqli->errno, $mysqli->error);
96	}
97
98	mysqli_free_result($res);
99
100	var_dump(mysqli_fetch_object($res));
101
102	// Fatal error, script execution will end
103	var_dump($res->fetch_object('this_class_does_not_exist'));
104
105	$mysqli->close();
106	print "done!";
107?>
108--CLEAN--
109<?php
110	require_once("clean_table.inc");
111?>
112--EXPECTF--
113Warning: Missing argument 1 for mysqli_fetch_object_construct::__construct() in %s on line %d
114
115Warning: Missing argument 2 for mysqli_fetch_object_construct::__construct() in %s on line %d
116
117Notice: Undefined variable: a in %s on line %d
118
119Notice: Undefined variable: b in %s on line %d
120
121Warning: Missing argument 2 for mysqli_fetch_object_construct::__construct() in %s on line %d
122
123Notice: Undefined variable: b in %s on line %d
124NULL
125NULL
126
127Warning: mysqli_fetch_object(): Couldn't fetch mysqli_result in %s on line %d
128NULL
129
130Fatal error: Class 'this_class_does_not_exist' not found in %s on line %d