Annotation of embedaddon/php/ext/pdo_mysql/tests/bug_44454.phpt, revision 1.1

1.1     ! misho       1: --TEST--
        !             2: Bug #44454 (Unexpected exception thrown in foreach() statement)
        !             3: --SKIPIF--
        !             4: <?php
        !             5: if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
        !             6: require dirname(__FILE__) . '/config.inc';
        !             7: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
        !             8: PDOTest::skip();
        !             9: ?>
        !            10: --FILE--
        !            11: <?php
        !            12: require dirname(__FILE__) . '/config.inc';
        !            13: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
        !            14: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
        !            15: 
        !            16: function bug_44454($db) {
        !            17: 
        !            18:        try {
        !            19: 
        !            20:                $db->exec('DROP TABLE IF EXISTS test');
        !            21:                $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))');
        !            22:                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
        !            23: 
        !            24:                $stmt = $db->query('SELECT a, b FROM test');
        !            25:                printf("... SELECT has returned %d row...\n", $stmt->rowCount());
        !            26:                while ($row = $stmt->fetch()) {
        !            27:                        try {
        !            28:                                printf("... INSERT should fail...\n");
        !            29:                                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
        !            30:                        } catch (Exception $e) {
        !            31:                                printf("... STMT - %s\n", var_export($stmt->errorCode(), true));
        !            32:                                printf("... PDO  - %s\n", var_export($db->errorInfo(), true));
        !            33:                        }
        !            34:                }
        !            35: 
        !            36:                $db->exec('DROP TABLE IF EXISTS test');
        !            37:                $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))');
        !            38:                $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
        !            39: 
        !            40:        } catch (Exception $e) {
        !            41:                printf("... While error %s\n", $e->getMessage()); ;
        !            42:        }
        !            43: 
        !            44:        $stmt = $db->query('SELECT a, b FROM test');
        !            45:        printf("... SELECT has returned %d row...\n", $stmt->rowCount());
        !            46:        foreach ($stmt as $row) {
        !            47:                try {
        !            48:                        printf("... INSERT should fail...\n");
        !            49:                        $db->exec('INSERT INTO test(a, b) VALUES (1, 1)');
        !            50:                } catch (Exception $e) {
        !            51:                        printf("... STMT - %s\n", var_export($stmt->errorCode(), true));
        !            52:                        printf("... PDO  - %s\n", var_export($db->errorInfo(), true));
        !            53:                }
        !            54:        }
        !            55: 
        !            56: }
        !            57: 
        !            58: $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
        !            59: 
        !            60: print "Native Prepared Statements\n";
        !            61: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
        !            62: bug_44454($db);
        !            63: 
        !            64: print "\nEmulated Prepared Statements\n";
        !            65: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
        !            66: bug_44454($db);
        !            67: 
        !            68: print "done!";
        !            69: ?>
        !            70: --CLEAN--
        !            71: <?php
        !            72: require dirname(__FILE__) . '/mysql_pdo_test.inc';
        !            73: $db = MySQLPDOTest::factory();
        !            74: $db->exec('DROP TABLE IF EXISTS test');
        !            75: ?>
        !            76: --XFAIL--
        !            77: For some reason the exception gets thrown at the wrong place
        !            78: --EXPECTF--
        !            79: Native Prepared Statements
        !            80: ... SELECT has returned 1 row...
        !            81: ... INSERT should fail...
        !            82: ... STMT - '00000'
        !            83: ... PDO  - array (
        !            84:   0 => '23000',
        !            85:   1 => 1062,
        !            86:   2 => 'Duplicate entry \'1-1\' for key %s',
        !            87: )
        !            88: ... SELECT has returned 1 row...
        !            89: ... INSERT should fail...
        !            90: ... STMT - '00000'
        !            91: ... PDO  - array (
        !            92:   0 => '23000',
        !            93:   1 => 1062,
        !            94:   2 => 'Duplicate entry \'1-1\' for key %s',
        !            95: )
        !            96: 
        !            97: Emulated Prepared Statements
        !            98: ... SELECT has returned 1 row...
        !            99: ... INSERT should fail...
        !           100: ... STMT - '00000'
        !           101: ... PDO  - array (
        !           102:   0 => '23000',
        !           103:   1 => 1062,
        !           104:   2 => 'Duplicate entry \'1-1\' for key %s',
        !           105: )
        !           106: ... SELECT has returned 1 row...
        !           107: ... INSERT should fail...
        !           108: ... STMT - '00000'
        !           109: ... PDO  - array (
        !           110:   0 => '23000',
        !           111:   1 => 1062,
        !           112:   2 => 'Duplicate entry \'1-1\' for key %s',
        !           113: )
        !           114: done!

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>