Annotation of embedaddon/php/ext/pdo_mysql/tests/bug_44707.phpt, revision 1.1.1.1
1.1 misho 1: --TEST--
2: Bug #44707 (The MySQL PDO driver resets variable content after bindParam on tinyint field)
3: --SKIPIF--
4: <?php
5: if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) die('skip not loaded');
6: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'skipif.inc');
7: require_once(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc');
8:
9: MySQLPDOTest::skip();
10:
11: $db = MySQLPDOTest::factory();
12: $stmt = $db->query('SELECT VERSION() as _version');
13: $row = $stmt->fetch(PDO::FETCH_ASSOC);
14: $matches = array();
15: if (!preg_match('/^(\d+)\.(\d+)\.(\d+)/ismU', $row['_version'], $matches))
16: die(sprintf("skip Cannot determine MySQL Server version\n"));
17:
18: $version = $matches[0] * 10000 + $matches[1] * 100 + $matches[2];
19: if ($version < 41000)
20: die(sprintf("skip Will work different with MySQL Server < 4.1.0, found %d.%02d.%02d (%d)\n",
21: $matches[0], $matches[1], $matches[2], $version));
22: ?>
23: --FILE--
24: <?php
25: require dirname(__FILE__) . '/config.inc';
26: require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc';
27: $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt');
28:
29: function bug_44707($db) {
30:
31: $db->exec('DROP TABLE IF EXISTS test');
32: $db->exec('CREATE TABLE test(id INT, mybool TINYINT)');
33:
34: $id = 1;
35: $mybool = false;
36: var_dump($mybool);
37:
38: $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)');
39: $stmt->bindParam(1, $id);
40: // From MySQL 4.1 on boolean and TINYINT don't match! INSERT will fail.
41: // Versions prior to 4.1 have a weak test and will accept this.
42: $stmt->bindParam(2, $mybool, PDO::PARAM_BOOL);
43: var_dump($mybool);
44:
45: $stmt->execute();
46: var_dump($mybool);
47:
48: $stmt = $db->query('SELECT * FROM test');
49: var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
50:
51: $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)');
52: $stmt->bindParam(1, $id);
53: // INT and integer work well together
54: $stmt->bindParam(2, $mybool, PDO::PARAM_INT);
55: $stmt->execute();
56:
57: $stmt = $db->query('SELECT * FROM test');
58: var_dump($stmt->fetchAll(PDO::FETCH_ASSOC));
59:
60: }
61:
62:
63: /*
64: // This is beyond the control of the driver... - the driver never gets in touch with bound values
65: print "Emulated Prepared Statements\n";
66: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1);
67: bug_44707($db);
68: */
69:
70: print "Native Prepared Statements\n";
71: $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0);
72: bug_44707($db);
73:
74: print "done!";
75: ?>
76: --EXPECTF--
77: Native Prepared Statements
78: bool(false)
79: bool(false)
80: bool(false)
81: array(0) {
82: }
83: array(1) {
84: [0]=>
85: array(2) {
86: [%u|b%"id"]=>
87: %unicode|string%(1) "1"
88: [%u|b%"mybool"]=>
89: %unicode|string%(1) "0"
90: }
91: }
92: done!
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>