xref: /PHP-7.4/ext/pdo_pgsql/tests/bug48764.phpt (revision 26dfce7f)
1--TEST--
2Bug #48764 (PDO_pgsql::query always uses implicit prepared statements if v3 proto available)
3--SKIPIF--
4<?php
5if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded');
6require __DIR__ . '/config.inc';
7require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
8PDOTest::skip();
9
10$db = PDOTest::factory();
11
12$client_version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION);
13$server_version = $db->getAttribute(PDO::ATTR_SERVER_VERSION);
14
15if (version_compare($server_version, '7.4', '<') || version_compare($client_version, '7.4', '<') || version_compare($server_version, '10', '>=')) {
16        die('skip');
17}
18
19?>
20--FILE--
21<?php
22require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc';
23$db = PDOTest::test_factory(__DIR__ . '/common.phpt');
24$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
25
26echo "Test 1\n";
27bug($db);
28
29echo "Test 2\n";
30bug($db, array(PDO::ATTR_EMULATE_PREPARES => 0));
31bug($db, array(PDO::ATTR_EMULATE_PREPARES => 1));
32
33echo "Test 3\n";
34$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
35bug($db);
36$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
37bug($db);
38
39putenv('PDOTEST_ATTR='.serialize(array(
40	PDO::ATTR_EMULATE_PREPARES => 1,
41)));
42$db = PDOTest::factory('PDO', false);
43$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
44
45echo "Test 4\n";
46bug($db);
47bug($db, array(PDO::ATTR_EMULATE_PREPARES => 0));
48
49putenv('PDOTEST_ATTR');
50
51
52function bug($db, $options = array()) {
53	try {
54		$stmt = $db->prepare("SELECT ?", $options);
55		$stmt->execute(array(1));
56		echo "OK\n";
57	} catch (PDOException $e) {
58		// Indetermined data type when using native prepared statements
59		echo $e->getCode()."\n";
60	}
61}
62--EXPECT--
63Test 1
6442P18
65Test 2
6642P18
67OK
68Test 3
69OK
7042P18
71Test 4
72OK
7342P18
74