1--TEST--
2MySQL PDOStatement->columnCount()
3--SKIPIF--
4<?php
5require_once(__DIR__ . DIRECTORY_SEPARATOR . 'skipif.inc');
6require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
7MySQLPDOTest::skip();
8$db = MySQLPDOTest::factory();
9?>
10--FILE--
11<?php
12    require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
13    $db = MySQLPDOTest::factory();
14    MySQLPDOTest::createTestTable($db);
15
16    // The only purpose of this is to check if emulated and native PS
17  // return the same. If it works for one, it should work for all.
18    // Internal data structures should be the same in both cases.
19    printf("Testing emulated PS...\n");
20    try {
21        $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1);
22        if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
23            printf("[002] Unable to turn on emulated prepared statements\n");
24
25        $stmt = $db->prepare("SELECT id, label, '?' as foo FROM test");
26        $stmt->execute();
27        var_dump($stmt->columnCount());
28
29        $stmt = $db->query('SELECT * FROM test');
30        var_dump($stmt->columnCount());
31
32    } catch (PDOException $e) {
33        printf("[001] %s [%s] %s\n",
34            $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
35    }
36
37    printf("Testing native PS...\n");
38    try {
39        $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0);
40        if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY))
41            printf("[004] Unable to turn off emulated prepared statements\n");
42
43        $stmt = $db->prepare("SELECT id, label, '?' as foo, 'TODO - Stored Procedure' as bar FROM test");
44        $stmt->execute();
45        var_dump($stmt->columnCount());
46
47        $stmt = $db->query('SELECT * FROM test');
48        var_dump($stmt->columnCount());
49
50    } catch (PDOException $e) {
51        printf("[003] %s [%s] %s\n",
52            $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
53    }
54
55    print "done!";
56?>
57--CLEAN--
58<?php
59require __DIR__ . '/mysql_pdo_test.inc';
60MySQLPDOTest::dropTestTable();
61?>
62--EXPECT--
63Testing emulated PS...
64int(3)
65int(2)
66Testing native PS...
67int(4)
68int(2)
69done!
70