Skip to content

Commit 0cf1e6b

Browse files
committed
Add test
1 parent 58da42a commit 0cf1e6b

File tree

1 file changed

+88
-0
lines changed

1 file changed

+88
-0
lines changed
Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
--TEST--
2+
PDO Common: PDOStatement::setFetchMode() errors
3+
--EXTENSIONS--
4+
pdo
5+
--SKIPIF--
6+
<?php
7+
$dir = getenv('REDIR_TEST_DIR');
8+
if (false == $dir) die('skip no driver');
9+
require_once $dir . 'pdo_test.inc';
10+
PDOTest::skip();
11+
?>
12+
--FILE--
13+
<?php
14+
if (getenv('REDIR_TEST_DIR') === false) putenv('REDIR_TEST_DIR='.__DIR__ . '/../../pdo/tests/');
15+
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
16+
$db = PDOTest::factory();
17+
18+
$db->exec('CREATE TABLE pdo_set_fetch_mode_error(id int NOT NULL PRIMARY KEY, val VARCHAR(10), val2 VARCHAR(10))');
19+
$db->exec("INSERT INTO pdo_set_fetch_mode_error VALUES(1, 'A', 'AA')");
20+
$db->exec("INSERT INTO pdo_set_fetch_mode_error VALUES(2, 'B', 'BB')");
21+
$db->exec("INSERT INTO pdo_set_fetch_mode_error VALUES(3, 'C', 'CC')");
22+
23+
$stmt = $db->prepare('SELECT id, val, val2 from pdo_set_fetch_mode_error');
24+
25+
foreach (range(PDO::FETCH_KEY_PAIR, 16) as $mode) {
26+
try {
27+
echo "Mode: $mode\n";
28+
var_dump($stmt->setFetchMode($mode));
29+
} catch (\Throwable $e) {
30+
echo $e::class, ': ', $e->getMessage(), \PHP_EOL;
31+
}
32+
}
33+
foreach (range(PDO::FETCH_KEY_PAIR, 16) as $mode) {
34+
try {
35+
echo "Mode: $mode\n";
36+
var_dump($stmt->setFetchMode($mode|PDO::FETCH_PROPS_LATE));
37+
} catch (\Throwable $e) {
38+
echo $e::class, ': ', $e->getMessage(), \PHP_EOL;
39+
}
40+
}
41+
try {
42+
var_dump($stmt->setFetchMode(PDO::FETCH_KEY_PAIR|PDO::FETCH_PROPS_LATE));
43+
} catch (\Throwable $e) {
44+
echo $e::class, ': ', $e->getMessage(), \PHP_EOL;
45+
}
46+
try {
47+
var_dump($stmt->setFetchMode(PDO::FETCH_KEY_PAIR|(PDO::FETCH_SERIALIZE*2)));
48+
} catch (\Throwable $e) {
49+
echo $e::class, ': ', $e->getMessage(), \PHP_EOL;
50+
}
51+
try {
52+
var_dump($stmt->setFetchMode(PDO::FETCH_FUNC));
53+
} catch (\Throwable $e) {
54+
echo $e::class, ': ', $e->getMessage(), \PHP_EOL;
55+
}
56+
57+
58+
?>
59+
--CLEAN--
60+
<?php
61+
require_once getenv('REDIR_TEST_DIR') . 'pdo_test.inc';
62+
$db = PDOTest::factory();
63+
PDOTest::dropTableIfExists($db, "pdo_set_fetch_mode_error");
64+
?>
65+
--EXPECT--
66+
Mode: 12
67+
bool(true)
68+
Mode: 13
69+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) must be a bitmask of PDO::FETCH_* constants
70+
Mode: 14
71+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) must be a bitmask of PDO::FETCH_* constants
72+
Mode: 15
73+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) must be a bitmask of PDO::FETCH_* constants
74+
Mode: 16
75+
bool(true)
76+
Mode: 12
77+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) cannot use PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, or PDO::FETCH_SERIALIZE fetch flags with a fetch mode other than PDO::FETCH_CLASS
78+
Mode: 13
79+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) cannot use PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, or PDO::FETCH_SERIALIZE fetch flags with a fetch mode other than PDO::FETCH_CLASS
80+
Mode: 14
81+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) cannot use PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, or PDO::FETCH_SERIALIZE fetch flags with a fetch mode other than PDO::FETCH_CLASS
82+
Mode: 15
83+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) cannot use PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, or PDO::FETCH_SERIALIZE fetch flags with a fetch mode other than PDO::FETCH_CLASS
84+
Mode: 16
85+
bool(true)
86+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) cannot use PDO::FETCH_CLASSTYPE, PDO::FETCH_PROPS_LATE, or PDO::FETCH_SERIALIZE fetch flags with a fetch mode other than PDO::FETCH_CLASS
87+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) must be a bitmask of PDO::FETCH_* constants
88+
ValueError: PDOStatement::setFetchMode(): Argument #1 ($mode) PDO::FETCH_FUNC can only be used with PDOStatement::fetchAll()

0 commit comments

Comments
 (0)