1--TEST-- 2GitHub #12424 (Fix GH-12423: [pdo_pgsql] Changed to prioritize DSN authentication information over arguments.) 3--EXTENSIONS-- 4pdo 5pdo_pgsql 6--SKIPIF-- 7<?php 8require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc'; 9require __DIR__ . '/config.inc'; 10if (strpos($config['ENV']['PDOTEST_DSN'], 'password=') === false && !isset($config['ENV']['PDOTEST_PASS'])) { 11 die('skip no password'); 12} 13PDOTest::skip(); 14?> 15--FILE-- 16<?php 17require __DIR__ . '/config.inc'; 18 19$dsnWithCredentials = $config['ENV']['PDOTEST_DSN']; 20$user = $config['ENV']['PDOTEST_USER'] ?? null; 21$password = $config['ENV']['PDOTEST_PASS'] ?? null; 22if (!$user) { 23 preg_match('/user=([^ ]*)/', $dsnWithCredentials, $match); 24 $user = $match[1] ?? ''; 25} 26if (!$password) { 27 preg_match('/password=([^ ]*)/', $dsnWithCredentials, $match); 28 $password = $match[1] ?? ''; 29} 30$dsn = str_replace("user={$user}", '', $dsnWithCredentials); 31$dsn = str_replace("password={$password}", '', $dsn); 32$dsn = rtrim($dsn); 33 34echo "dsn without credentials / correct user / correct password".PHP_EOL; 35try { 36 $db = new PDO($dsn, $user, $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 37 echo "Connected.".PHP_EOL.PHP_EOL; 38} catch (PDOException $e) { 39 echo $e->getMessage().PHP_EOL; 40} 41 42echo "dsn with credentials / no user / no password".PHP_EOL; 43try { 44 $db = new PDO("{$dsn} user={$user} password={$password}", null, null, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 45 echo "Connected.".PHP_EOL.PHP_EOL; 46} catch (PDOException $e) { 47 echo $e->getMessage().PHP_EOL; 48} 49 50echo "dsn with correct user / incorrect user / correct password".PHP_EOL; 51try { 52 $db = new PDO("{$dsn} user={$user}", 'hoge', $password, [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 53 echo "Connected.".PHP_EOL.PHP_EOL; 54} catch (PDOException $e) { 55 echo $e->getMessage().PHP_EOL; 56} 57 58echo "dsn with correct password / correct user / incorrect password".PHP_EOL; 59try { 60 $db = new PDO("{$dsn} password={$password}", $user, 'fuga', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 61 echo "Connected.".PHP_EOL.PHP_EOL; 62} catch (PDOException $e) { 63 echo $e->getMessage().PHP_EOL; 64} 65 66echo "dsn with correct credentials / incorrect user / incorrect password".PHP_EOL; 67try { 68 $db = new PDO("{$dsn} user={$user} password={$password}", 'hoge', 'fuga', [PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION]); 69 echo "Connected.".PHP_EOL; 70} catch (PDOException $e) { 71 echo $e->getMessage().PHP_EOL; 72} 73?> 74--EXPECT-- 75dsn without credentials / correct user / correct password 76Connected. 77 78dsn with credentials / no user / no password 79Connected. 80 81dsn with correct user / incorrect user / correct password 82Connected. 83 84dsn with correct password / correct user / incorrect password 85Connected. 86 87dsn with correct credentials / incorrect user / incorrect password 88Connected. 89