1--TEST-- 2Bug #45120 (PDOStatement->execute() returns true then false for same statement) 3--SKIPIF-- 4<?php 5if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded'); 6require __DIR__ . '/config.inc'; 7require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc'; 8PDOTest::skip(); 9?> 10--FILE-- 11<?php 12require __DIR__ . '/config.inc'; 13require __DIR__ . '/../../../ext/pdo/tests/pdo_test.inc'; 14$db = PDOTest::test_factory(__DIR__ . '/common.phpt'); 15 16function bug_45120($db) { 17 18 $stmt = $db->prepare("SELECT 1 AS 'one'"); 19 if (true !== $stmt->execute()) 20 printf("[001] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); 21 22 $res = $stmt->fetch(PDO::FETCH_ASSOC); 23 if ($res['one'] != 1) 24 printf("[002] Wrong results: %s\n", var_export($res, true)); 25 26 if (true !== $stmt->execute()) 27 printf("[003] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); 28 29 $res = $stmt->fetch(PDO::FETCH_ASSOC); 30 if ($res['one'] != 1) 31 printf("[004] Wrong results: %s\n", var_export($res, true)); 32 33} 34 35print "Emulated Prepared Statements\n"; 36$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); 37bug_45120($db); 38 39print "Native Prepared Statements\n"; 40$db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); 41bug_45120($db); 42 43print "done!"; 44?> 45--EXPECT-- 46Emulated Prepared Statements 47Native Prepared Statements 48done! 49