Annotation of embedaddon/php/ext/pdo_mysql/tests/bug_44707.phpt, revision 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>