1--TEST--
2MySQL PDOStatement->execute()/fetch(), Non-SELECT
3--SKIPIF--
4<?php
5require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
6require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
7MySQLPDOTest::skip();
8?>
9--FILE--
10<?php
11    require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
12
13    try {
14
15        class MyPDO extends PDO {
16
17            public function __construct() {
18                $this->protocol();
19                return call_user_func_array(array($this, 'parent::__construct'), func_get_args());
20            }
21
22            public function exec($statement) {
23                $this->protocol();
24                return parent::exec($statement);
25            }
26
27            public function query(...$args) {
28                $this->protocol();
29                return parent::query(...$args);
30            }
31
32            public function __call($method, $args) {
33                print "__call(".var_export($method,true).", ".var_export($args, true).")\n";
34                // $this->protocol();
35            }
36
37            private function protocol() {
38                $stack = debug_backtrace();
39                if (!isset($stack[1]))
40                    return;
41
42                printf("%s(", $stack[1]['function']);
43                $args = '';
44                foreach ($stack[1]['args'] as $k => $v)
45                    $args .= sprintf("%s, ", var_export($v, true));
46                if ($args != '')
47                    printf("%s", substr($args, 0, -2));
48                printf(")\n");
49            }
50
51        }
52
53        $db = new MyPDO(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS);
54        $db->exec('DROP TABLE IF EXISTS test');
55        $db->exec('CREATE TABLE test(id INT)');
56        $db->exec('INSERT INTO test(id) VALUES (1), (2)');
57        $stmt = $db->query('SELECT * FROM test ORDER BY id ASC');
58        var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
59        var_dump($stmt->fetch());
60        $db->intercept_call();
61
62
63    } catch (PDOException $e) {
64        printf("[001] %s [%s] %s\n",
65            $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
66    }
67
68    $db->exec('DROP TABLE IF EXISTS test');
69    print "done!\n";
70?>
71--CLEAN--
72<?php
73require __DIR__ . '/mysql_pdo_test.inc';
74$db = MySQLPDOTest::factory();
75$db->exec('DROP TABLE IF EXISTS test');
76?>
77--EXPECTF--
78__construct('%S', '%S', %s)
79exec('DROP TABLE IF EXISTS test')
80exec('CREATE TABLE test(id INT)')
81exec('INSERT INTO test(id) VALUES (1), (2)')
82query('SELECT * FROM test ORDER BY id ASC')
83array(2) {
84  [0]=>
85  array(1) {
86    ["id"]=>
87    string(1) "1"
88  }
89  [1]=>
90  array(1) {
91    ["id"]=>
92    string(1) "2"
93  }
94}
95bool(false)
96__call('intercept_call', array (
97))
98exec('DROP TABLE IF EXISTS test')
99done!
100