1--TEST--
2MySQL PDOStatement->columnCount()
3--SKIPIF--
4<?php
5require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
6require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
7MySQLPDOTest::skip();
8$db = MySQLPDOTest::factory();
9?>
10--FILE--
11<?php
12	require_once(dirname(__FILE__) . 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 dirname(__FILE__) . '/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