1--TEST-- 2Request #71855 (PDO placeholder escaping, part 2) 3--SKIPIF-- 4<?php 5if (!extension_loaded('pdo') || !extension_loaded('pdo_pgsql')) die('skip not loaded'); 6require_once dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; 7require_once dirname(__FILE__) . '/config.inc'; 8PDOTest::skip(); 9 10$db = PDOTest::factory(); 11if (version_compare($db->getAttribute(PDO::ATTR_SERVER_VERSION), '9.4.0') < 0) { 12 die("skip Requires 9.4+"); 13} 14 15?> 16--FILE-- 17<?php 18require_once dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; 19require_once dirname(__FILE__) . '/config.inc'; 20$db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); 21$db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 22$db->setAttribute(PDO::ATTR_DEFAULT_FETCH_MODE, PDO::FETCH_NUM); 23 24$jsonb = $db->quote(json_encode(['a' => 1])); 25 26foreach ([false, true] as $emulate) { 27 $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, $emulate); 28 29 $stmt = $db->prepare("SELECT {$jsonb}::jsonb ?? ?"); 30 $stmt->execute(['b']); 31 var_dump($stmt->fetch()); 32 33 $stmt = $db->prepare("SELECT {$jsonb}::jsonb ???"); 34 $stmt->execute(['a']); 35 var_dump($stmt->fetch()); 36} 37 38?> 39==OK== 40--EXPECT-- 41array(1) { 42 [0]=> 43 bool(false) 44} 45array(1) { 46 [0]=> 47 bool(true) 48} 49array(1) { 50 [0]=> 51 bool(false) 52} 53array(1) { 54 [0]=> 55 bool(true) 56} 57==OK== 58