xref: /PHP-8.4/ext/pdo/tests/pdo_035.phpt (revision b4e272c5)
1--TEST--
2PDO Common: PDORow + get_parent_class()
3--EXTENSIONS--
4pdo
5--SKIPIF--
6<?php
7$dir = getenv('REDIR_TEST_DIR');
8if (false == $dir) die('skip no driver');
9require_once $dir . 'pdo_test.inc';
10PDOTest::skip();
11?>
12--FILE--
13<?php
14if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
15require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
16$db = PDOTest::factory();
17
18const TABLE_NAME = 'test_pdo_35_pdo_row';
19$db->exec('CREATE TABLE ' . TABLE_NAME .' (id int, name varchar(10))');
20$db->exec('INSERT INTO ' . TABLE_NAME .' VALUES (23, \'0\')');
21
22$stmt = $db->prepare('SELECT id, name FROM ' . TABLE_NAME);
23$stmt->execute();
24$result = $stmt->fetch(PDO::FETCH_LAZY);
25
26var_dump($result);
27var_dump(get_parent_class($result));
28
29foreach ([0, "0", "id", "name", 1] as $offset) {
30    echo 'Offset: ', var_export($offset), PHP_EOL;
31    $offsetRef = &$offset;
32
33    echo 'Dimension:', PHP_EOL;
34    echo 'Isset:', PHP_EOL;
35    var_dump(isset($result[$offset]));
36    var_dump(isset($result[$offsetRef]));
37    echo 'Empty:', PHP_EOL;
38    var_dump(empty($result[$offset]));
39    var_dump(empty($result[$offsetRef]));
40    echo 'Null coalesce:', PHP_EOL;
41    var_dump($result[$offset] ?? "default");
42    var_dump($result[$offsetRef] ?? "default");
43    echo 'Read:', PHP_EOL;
44    var_dump($result[$offset]);
45    var_dump($result[$offsetRef]);
46    echo 'Property:', PHP_EOL;
47    echo 'Isset:', PHP_EOL;
48    var_dump(isset($result->{$offset}));
49    var_dump(isset($result->{$offsetRef}));
50    echo 'Empty:', PHP_EOL;
51    var_dump(empty($result->{$offset}));
52    var_dump(empty($result->{$offsetRef}));
53    echo 'Null coalesce:', PHP_EOL;
54    var_dump($result->{$offset} ?? "default");
55    var_dump($result->{$offsetRef} ?? "default");
56    echo 'Read:', PHP_EOL;
57    var_dump($result->{$offset});
58    var_dump($result->{$offsetRef});
59}
60
61echo 'Errors:', PHP_EOL;
62try {
63    $result[0] = 1;
64} catch (Error $e) {
65    echo $e->getMessage(), "\n";
66}
67try {
68    $result[] = 1;
69} catch (Error $e) {
70    echo $e->getMessage(), "\n";
71}
72try {
73    $refResult = &$result[0];
74} catch (Error $e) {
75    echo $e->getMessage(), "\n";
76}
77try {
78    $refResult = &$result[];
79} catch (Error $e) {
80    echo $e->getMessage(), "\n";
81}
82try {
83    unset($result[0]);
84} catch (Error $e) {
85    echo $e->getMessage(), "\n";
86}
87try {
88    $result->foo = 1;
89} catch (Error $e) {
90    echo $e->getMessage(), "\n";
91}
92try {
93    unset($result->foo);
94} catch (Error $e) {
95    echo $e->getMessage(), "\n";
96}
97
98?>
99--CLEAN--
100<?php
101if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
102require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
103$db = PDOTest::factory();
104$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
105
106const TABLE_NAME = 'test_pdo_35_pdo_row';
107$db->exec("DROP TABLE " . TABLE_NAME);
108?>
109--EXPECTF--
110object(PDORow)#3 (3) {
111  ["queryString"]=>
112  string(40) "SELECT id, name FROM test_pdo_35_pdo_row"
113  ["id"]=>
114  string(2) "23"
115  ["name"]=>
116  string(1) "0"
117}
118bool(false)
119Offset: 0
120Dimension:
121Isset:
122bool(true)
123bool(true)
124Empty:
125bool(false)
126bool(false)
127Null coalesce:
128string(2) "23"
129string(2) "23"
130Read:
131string(2) "23"
132string(2) "23"
133Property:
134Isset:
135bool(true)
136bool(true)
137Empty:
138bool(false)
139bool(false)
140Null coalesce:
141string(2) "23"
142string(2) "23"
143Read:
144string(2) "23"
145string(2) "23"
146Offset: '0'
147Dimension:
148Isset:
149bool(true)
150bool(true)
151Empty:
152bool(false)
153bool(false)
154Null coalesce:
155string(2) "23"
156string(2) "23"
157Read:
158string(2) "23"
159string(2) "23"
160Property:
161Isset:
162bool(true)
163bool(true)
164Empty:
165bool(false)
166bool(false)
167Null coalesce:
168string(2) "23"
169string(2) "23"
170Read:
171string(2) "23"
172string(2) "23"
173Offset: 'id'
174Dimension:
175Isset:
176bool(true)
177bool(true)
178Empty:
179bool(false)
180bool(false)
181Null coalesce:
182string(2) "23"
183string(2) "23"
184Read:
185string(2) "23"
186string(2) "23"
187Property:
188Isset:
189bool(true)
190bool(true)
191Empty:
192bool(false)
193bool(false)
194Null coalesce:
195string(2) "23"
196string(2) "23"
197Read:
198string(2) "23"
199string(2) "23"
200Offset: 'name'
201Dimension:
202Isset:
203bool(true)
204bool(true)
205Empty:
206bool(true)
207bool(true)
208Null coalesce:
209string(1) "0"
210string(1) "0"
211Read:
212string(1) "0"
213string(1) "0"
214Property:
215Isset:
216bool(true)
217bool(true)
218Empty:
219bool(true)
220bool(true)
221Null coalesce:
222string(1) "0"
223string(1) "0"
224Read:
225string(1) "0"
226string(1) "0"
227Offset: 1
228Dimension:
229Isset:
230bool(true)
231bool(true)
232Empty:
233bool(true)
234bool(true)
235Null coalesce:
236string(1) "0"
237string(1) "0"
238Read:
239string(1) "0"
240string(1) "0"
241Property:
242Isset:
243bool(true)
244bool(true)
245Empty:
246bool(true)
247bool(true)
248Null coalesce:
249string(1) "0"
250string(1) "0"
251Read:
252string(1) "0"
253string(1) "0"
254Errors:
255Cannot write to PDORow offset
256Cannot append to PDORow offset
257
258Notice: Indirect modification of overloaded element of PDORow has no effect in %s on line %d
259Cannot append to PDORow offset
260Cannot unset PDORow offset
261Cannot write to PDORow property
262Cannot unset PDORow property
263