diff options
Diffstat (limited to 'ext/pdo_mysql')
103 files changed, 6274 insertions, 6274 deletions
diff --git a/ext/pdo_mysql/tests/bug41125.phpt b/ext/pdo_mysql/tests/bug41125.phpt index 2212bb621d..63ff7df2f3 100644 --- a/ext/pdo_mysql/tests/bug41125.phpt +++ b/ext/pdo_mysql/tests/bug41125.phpt @@ -24,19 +24,19 @@ print implode(' - ', $stmt->errorinfo()) ."\n"; print "-------------------------------------------------------\n"; $queries = array( - "SELECT 1 FROM DUAL WHERE 1 = '?\'\''", - "SELECT 'a\\'0' FROM DUAL WHERE 1 = ?", - "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND ?", - "SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?" + "SELECT 1 FROM DUAL WHERE 1 = '?\'\''", + "SELECT 'a\\'0' FROM DUAL WHERE 1 = ?", + "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND ?", + "SELECT 'foo?bar', '', '''' FROM DUAL WHERE ?" ); foreach ($queries as $k => $query) { - $stmt = $db->prepare($query); - $stmt->execute(array(1)); - printf("[%d] Query: [[%s]]\n", $k + 1, $query); - print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n"; - print implode(' - ', $stmt->errorinfo()) ."\n"; - print "--------\n"; + $stmt = $db->prepare($query); + $stmt->execute(array(1)); + printf("[%d] Query: [[%s]]\n", $k + 1, $query); + print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n"; + print implode(' - ', $stmt->errorinfo()) ."\n"; + print "--------\n"; } $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); @@ -53,33 +53,33 @@ print implode(' - ', $stmt->errorinfo()) ."\n"; print "-------------------------------------------------------\n"; $queries = array( - "SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\\0' IS NULL AND 2 <> :id", - "SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND 2 <> :id", - "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND 2 <> :id", - "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND 2 <> :id", - "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1", - "SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1", - "SELECT UPPER(:id) FROM DUAL WHERE '1'", - "SELECT 1 FROM DUAL WHERE '\''", - "SELECT 1 FROM DUAL WHERE :id AND '\\0' OR :id", - "SELECT 1 FROM DUAL WHERE 'a\\f\\n\\0' AND 1 >= :id", - "SELECT 1 FROM DUAL WHERE '\'' = ''''", - "SELECT '\\n' '1 FROM DUAL WHERE '''' and :id'", - "SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id", + "SELECT 1, 'foo' FROM DUAL WHERE 1 = :id AND '\\0' IS NULL AND 2 <> :id", + "SELECT 1 FROM DUAL WHERE 1 = :id AND '' AND 2 <> :id", + "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'\'' = '''' AND 2 <> :id", + "SELECT 1 FROM DUAL WHERE 1 = :id AND '\'' = '''' AND 2 <> :id", + "SELECT 'a', 'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1", + "SELECT 'a''', '\'b\'' FROM DUAL WHERE '''' LIKE '\\'' AND 1", + "SELECT UPPER(:id) FROM DUAL WHERE '1'", + "SELECT 1 FROM DUAL WHERE '\''", + "SELECT 1 FROM DUAL WHERE :id AND '\\0' OR :id", + "SELECT 1 FROM DUAL WHERE 'a\\f\\n\\0' AND 1 >= :id", + "SELECT 1 FROM DUAL WHERE '\'' = ''''", + "SELECT '\\n' '1 FROM DUAL WHERE '''' and :id'", + "SELECT 1 'FROM DUAL WHERE :id AND '''' = '''' OR 1 = 1 AND ':id", ); $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); $id = 1; foreach ($queries as $k => $query) { - $stmt = $db->prepare($query); - $stmt->bindParam(':id', $id); - $stmt->execute(); - - printf("[%d] Query: [[%s]]\n", $k + 1, $query); - print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n"; - print implode(' - ', $stmt->errorinfo()) ."\n"; - print "--------\n"; + $stmt = $db->prepare($query); + $stmt->bindParam(':id', $id); + $stmt->execute(); + + printf("[%d] Query: [[%s]]\n", $k + 1, $query); + print implode(' - ', (($r = @$stmt->fetch(PDO::FETCH_NUM)) ? $r : array())) ."\n"; + print implode(' - ', $stmt->errorinfo()) ."\n"; + print "--------\n"; } ?> diff --git a/ext/pdo_mysql/tests/bug44327.phpt b/ext/pdo_mysql/tests/bug44327.phpt index f457c97aeb..5adc8209e7 100644 --- a/ext/pdo_mysql/tests/bug44327.phpt +++ b/ext/pdo_mysql/tests/bug44327.phpt @@ -9,35 +9,35 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $stmt = $db->prepare("SELECT 1 AS \"one\""); - $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_LAZY); - var_dump($row); - var_dump($row->{0}); - var_dump($row->one); - var_dump($row->queryString); + $stmt = $db->prepare("SELECT 1 AS \"one\""); + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_LAZY); + var_dump($row); + var_dump($row->{0}); + var_dump($row->one); + var_dump($row->queryString); - print "----------------------------------\n"; + print "----------------------------------\n"; - @$db->exec("DROP TABLE test"); - $db->exec("CREATE TABLE test (id INT)"); - $db->exec("INSERT INTO test(id) VALUES (1)"); - $stmt = $db->prepare("SELECT id FROM test"); - $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_LAZY); - var_dump($row); - var_dump($row->queryString); - @$db->exec("DROP TABLE test"); + @$db->exec("DROP TABLE test"); + $db->exec("CREATE TABLE test (id INT)"); + $db->exec("INSERT INTO test(id) VALUES (1)"); + $stmt = $db->prepare("SELECT id FROM test"); + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_LAZY); + var_dump($row); + var_dump($row->queryString); + @$db->exec("DROP TABLE test"); - print "----------------------------------\n"; + print "----------------------------------\n"; - $stmt = $db->prepare('foo'); - @$stmt->execute(); - $row = $stmt->fetch(); - var_dump($row->queryString); + $stmt = $db->prepare('foo'); + @$stmt->execute(); + $row = $stmt->fetch(); + var_dump($row->queryString); ?> --EXPECTF-- diff --git a/ext/pdo_mysql/tests/bug46292.phpt b/ext/pdo_mysql/tests/bug46292.phpt index fd2ef759e5..dec4a9f550 100644 --- a/ext/pdo_mysql/tests/bug46292.phpt +++ b/ext/pdo_mysql/tests/bug46292.phpt @@ -9,45 +9,45 @@ MySQLPDOTest::skip(); --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $pdoDb = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $pdoDb = MySQLPDOTest::factory(); - class myclass implements Serializable { - public function __construct() { - printf("%s()\n", __METHOD__); - } + class myclass implements Serializable { + public function __construct() { + printf("%s()\n", __METHOD__); + } - public function serialize() { - printf("%s()\n", __METHOD__); - return "any data from serialize()"; - } + public function serialize() { + printf("%s()\n", __METHOD__); + return "any data from serialize()"; + } - public function unserialize($dat) { - printf("%s(%s)\n", __METHOD__, var_export($dat, true)); - return $dat; - } - } + public function unserialize($dat) { + printf("%s(%s)\n", __METHOD__, var_export($dat, true)); + return $dat; + } + } - class myclass2 extends myclass { } + class myclass2 extends myclass { } - $pdoDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - $pdoDb->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $pdoDb->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $pdoDb->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $pdoDb->query('DROP TABLE IF EXISTS testz'); + $pdoDb->query('DROP TABLE IF EXISTS testz'); - $pdoDb->query('CREATE TABLE testz (name VARCHAR(20) NOT NULL, value INT)'); + $pdoDb->query('CREATE TABLE testz (name VARCHAR(20) NOT NULL, value INT)'); - $pdoDb->query("INSERT INTO testz VALUES ('myclass', 1), ('myclass2', 2), ('myclass', NULL), ('myclass3', NULL)"); + $pdoDb->query("INSERT INTO testz VALUES ('myclass', 1), ('myclass2', 2), ('myclass', NULL), ('myclass3', NULL)"); - $stmt = $pdoDb->prepare("SELECT * FROM testz"); + $stmt = $pdoDb->prepare("SELECT * FROM testz"); - var_dump($stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE | PDO::FETCH_GROUP)); - $stmt->execute(); + var_dump($stmt->setFetchMode(PDO::FETCH_CLASS | PDO::FETCH_CLASSTYPE | PDO::FETCH_GROUP)); + $stmt->execute(); - var_dump($stmt->fetch()); - var_dump($stmt->fetch()); - var_dump($stmt->fetchAll()); + var_dump($stmt->fetch()); + var_dump($stmt->fetch()); + var_dump($stmt->fetchAll()); ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/bug54929.phpt b/ext/pdo_mysql/tests/bug54929.phpt index 6f2c2b0b80..c9f68af862 100644 --- a/ext/pdo_mysql/tests/bug54929.phpt +++ b/ext/pdo_mysql/tests/bug54929.phpt @@ -16,14 +16,14 @@ $pdodb = PDOTest::test_factory(__DIR__ . '/common.phpt'); function testQuery($query) { - global $pdodb; - $stmt = $pdodb->prepare($query); + global $pdodb; + $stmt = $pdodb->prepare($query); - if (!$stmt->execute(array("foo"))) { - var_dump($stmt->errorInfo()); - } else{ - var_dump($stmt->fetch(PDO::FETCH_ASSOC)); - } + if (!$stmt->execute(array("foo"))) { + var_dump($stmt->errorInfo()); + } else{ + var_dump($stmt->fetch(PDO::FETCH_ASSOC)); + } } testQuery("/* ' */ select ? as f1 /* ' */"); diff --git a/ext/pdo_mysql/tests/bug63176.phpt b/ext/pdo_mysql/tests/bug63176.phpt index ed462c0c53..2a75f47384 100644 --- a/ext/pdo_mysql/tests/bug63176.phpt +++ b/ext/pdo_mysql/tests/bug63176.phpt @@ -10,24 +10,24 @@ MySQLPDOTest::skip(); <?php require(__DIR__. DIRECTORY_SEPARATOR . 'config.inc'); class PDO2 extends PDO { - protected $transLevel; + protected $transLevel; } class PDO3 extends PDO { - protected $tomato; + protected $tomato; } class ModelA { - public function __construct($h) { - var_dump($h); - if ($h) { - $this->db = new PDO2(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true)); - } else { - $this->db = new PDO3(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true)); - } - $this->db->query('SELECT 1')->fetchAll(); - } + public function __construct($h) { + var_dump($h); + if ($h) { + $this->db = new PDO2(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true)); + } else { + $this->db = new PDO3(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS, array(PDO::ATTR_PERSISTENT => true)); + } + $this->db->query('SELECT 1')->fetchAll(); + } } $a = new ModelA(true); diff --git a/ext/pdo_mysql/tests/bug68371.phpt b/ext/pdo_mysql/tests/bug68371.phpt index f5046f0375..17eee8c2f4 100644 --- a/ext/pdo_mysql/tests/bug68371.phpt +++ b/ext/pdo_mysql/tests/bug68371.phpt @@ -14,54 +14,54 @@ $pdo->setAttribute (\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION); $attrs = array( // Extensive test: default value and set+get values - PDO::ATTR_EMULATE_PREPARES => array(null, 1, 0), - PDO::MYSQL_ATTR_DIRECT_QUERY => array(null, 0, 1), - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => array(null, 0, 1), + PDO::ATTR_EMULATE_PREPARES => array(null, 1, 0), + PDO::MYSQL_ATTR_DIRECT_QUERY => array(null, 0, 1), + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => array(null, 0, 1), // Just test the default - PDO::ATTR_AUTOCOMMIT => array(null), - PDO::ATTR_PREFETCH => array(null), - PDO::ATTR_TIMEOUT => array(null), - PDO::ATTR_ERRMODE => array(null), - PDO::ATTR_SERVER_VERSION => array(null), - PDO::ATTR_CLIENT_VERSION => array(null), - PDO::ATTR_SERVER_INFO => array(null), - PDO::ATTR_CONNECTION_STATUS => array(null), - PDO::ATTR_CASE => array(null), - PDO::ATTR_CURSOR_NAME => array(null), - PDO::ATTR_CURSOR => array(null), - PDO::ATTR_ORACLE_NULLS => array(null), - PDO::ATTR_PERSISTENT => array(null), - PDO::ATTR_STATEMENT_CLASS => array(null), - PDO::ATTR_FETCH_TABLE_NAMES => array(null), - PDO::ATTR_FETCH_CATALOG_NAMES => array(null), - PDO::ATTR_DRIVER_NAME => array(null), - PDO::ATTR_STRINGIFY_FETCHES => array(null), - PDO::ATTR_MAX_COLUMN_LEN => array(null), - PDO::ATTR_DEFAULT_FETCH_MODE => array(null), + PDO::ATTR_AUTOCOMMIT => array(null), + PDO::ATTR_PREFETCH => array(null), + PDO::ATTR_TIMEOUT => array(null), + PDO::ATTR_ERRMODE => array(null), + PDO::ATTR_SERVER_VERSION => array(null), + PDO::ATTR_CLIENT_VERSION => array(null), + PDO::ATTR_SERVER_INFO => array(null), + PDO::ATTR_CONNECTION_STATUS => array(null), + PDO::ATTR_CASE => array(null), + PDO::ATTR_CURSOR_NAME => array(null), + PDO::ATTR_CURSOR => array(null), + PDO::ATTR_ORACLE_NULLS => array(null), + PDO::ATTR_PERSISTENT => array(null), + PDO::ATTR_STATEMENT_CLASS => array(null), + PDO::ATTR_FETCH_TABLE_NAMES => array(null), + PDO::ATTR_FETCH_CATALOG_NAMES => array(null), + PDO::ATTR_DRIVER_NAME => array(null), + PDO::ATTR_STRINGIFY_FETCHES => array(null), + PDO::ATTR_MAX_COLUMN_LEN => array(null), + PDO::ATTR_DEFAULT_FETCH_MODE => array(null), ); foreach ($attrs as $a => $vals) { - foreach ($vals as $v) { - try { - if (!isset($v)) { - var_dump($pdo->getAttribute($a)); - } else { - $pdo->setAttribute($a, $v); - if ($pdo->getAttribute($a) === $v) { - echo "OK\n"; - } else { - throw new \Exception('KO'); - } - } - } catch (\Exception $e) { - if ($e->getCode() == 'IM001') { - echo "ERR\n"; - } else { - echo "ERR {$e->getMessage()}\n"; - } - } - } + foreach ($vals as $v) { + try { + if (!isset($v)) { + var_dump($pdo->getAttribute($a)); + } else { + $pdo->setAttribute($a, $v); + if ($pdo->getAttribute($a) === $v) { + echo "OK\n"; + } else { + throw new \Exception('KO'); + } + } + } catch (\Exception $e) { + if ($e->getCode() == 'IM001') { + echo "ERR\n"; + } else { + echo "ERR {$e->getMessage()}\n"; + } + } + } } ?> diff --git a/ext/pdo_mysql/tests/bug70389.phpt b/ext/pdo_mysql/tests/bug70389.phpt index 09f439804e..f2be259543 100644 --- a/ext/pdo_mysql/tests/bug70389.phpt +++ b/ext/pdo_mysql/tests/bug70389.phpt @@ -10,9 +10,9 @@ MySQLPDOTest::skip(); <?php require(__DIR__. DIRECTORY_SEPARATOR . 'config.inc'); $flags = [ - PDO::MYSQL_ATTR_FOUND_ROWS => true, - PDO::MYSQL_ATTR_LOCAL_INFILE => true, - PDO::ATTR_PERSISTENT => true, + PDO::MYSQL_ATTR_FOUND_ROWS => true, + PDO::MYSQL_ATTR_LOCAL_INFILE => true, + PDO::ATTR_PERSISTENT => true, ]; $std = new StdClass(); diff --git a/ext/pdo_mysql/tests/bug70862.phpt b/ext/pdo_mysql/tests/bug70862.phpt index d54d19f17b..fee79cbebb 100644 --- a/ext/pdo_mysql/tests/bug70862.phpt +++ b/ext/pdo_mysql/tests/bug70862.phpt @@ -8,32 +8,32 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label BLOB)')); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label BLOB)')); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - class HelloWrapper { - public function stream_open() { return true; } - public function stream_eof() { return true; } - public function stream_read() { return NULL; } - public function stream_stat() { return array(); } - } - stream_wrapper_register("hello", "HelloWrapper"); + class HelloWrapper { + public function stream_open() { return true; } + public function stream_eof() { return true; } + public function stream_read() { return NULL; } + public function stream_stat() { return array(); } + } + stream_wrapper_register("hello", "HelloWrapper"); - $f = fopen("hello://there", "r"); + $f = fopen("hello://there", "r"); - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, :para)'); - $stmt->bindParam(":para", $f, PDO::PARAM_LOB); - $stmt->execute(); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, :para)'); + $stmt->bindParam(":para", $f, PDO::PARAM_LOB); + $stmt->execute(); - var_dump($f); + var_dump($f); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/bug75177.phpt b/ext/pdo_mysql/tests/bug75177.phpt index 4f2adaf778..f6414f0b29 100644 --- a/ext/pdo_mysql/tests/bug75177.phpt +++ b/ext/pdo_mysql/tests/bug75177.phpt @@ -21,7 +21,7 @@ $pdo->query("INSERT INTO $tbl (`bit`) VALUES (0b01100)"); $ret = $pdo->query("SELECT * FROM $tbl")->fetchAll(); foreach ($ret as $i) { - var_dump($i["bit"]); + var_dump($i["bit"]); } ?> diff --git a/ext/pdo_mysql/tests/bug_33689.phpt b/ext/pdo_mysql/tests/bug_33689.phpt index 0755112f5f..84b8f5b914 100644 --- a/ext/pdo_mysql/tests/bug_33689.phpt +++ b/ext/pdo_mysql/tests/bug_33689.phpt @@ -18,7 +18,7 @@ $db->exec('INSERT INTO test VALUES(1)'); var_dump($db->query('SELECT * from test')); foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } $stmt = $db->prepare('SELECT * from test'); @@ -28,9 +28,9 @@ $tmp = $stmt->getColumnMeta(0); // libmysql and mysqlnd will show the pdo_type entry at a different position in the hash if (!isset($tmp['pdo_type']) || (isset($tmp['pdo_type']) && $tmp['pdo_type'] != 2)) - printf("Expecting pdo_type = 2 got %s\n", $tmp['pdo_type']); + printf("Expecting pdo_type = 2 got %s\n", $tmp['pdo_type']); else - unset($tmp['pdo_type']); + unset($tmp['pdo_type']); print_r($tmp); ?> diff --git a/ext/pdo_mysql/tests/bug_38546.phpt b/ext/pdo_mysql/tests/bug_38546.phpt index 0d7b44d1dc..238bccb035 100644 --- a/ext/pdo_mysql/tests/bug_38546.phpt +++ b/ext/pdo_mysql/tests/bug_38546.phpt @@ -21,20 +21,20 @@ $db->exec("SET sql_mode='STRICT_TRANS_TABLES'"); $db->exec("DROP TABLE IF EXISTS test"); $query = "CREATE TABLE test( - uid MEDIUMINT UNSIGNED NOT NULL, + uid MEDIUMINT UNSIGNED NOT NULL, some_bool_1 BOOL NOT NULL, some_bool_2 BOOL NOT NULL, some_int TINYINT NOT NULL - )"; + )"; $db->exec($query); $st = $db->prepare("INSERT INTO test (uid, some_bool_1, some_bool_2, some_int) VALUES (?, ?, ?, ?)"); $values = [ - 'uid' => 6, - 'some_bool_1' => false, - 'some_bool_2' => true, - 'some_int' => -23 + 'uid' => 6, + 'some_bool_1' => false, + 'some_bool_2' => true, + 'some_int' => -23 ]; $st->bindParam(1, $values['uid'], PDO::PARAM_INT); $st->bindParam(2, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -50,16 +50,16 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } $st = $db->prepare("UPDATE test SET some_bool_1=?, some_bool_2=?, some_int=? WHERE uid=?"); $values = [ - 'uid' => 6, - 'some_bool_1' => (bool) 1, - 'some_bool_2' => (bool) 0, - 'some_int' => 1, + 'uid' => 6, + 'some_bool_1' => (bool) 1, + 'some_bool_2' => (bool) 0, + 'some_int' => 1, ]; $st->bindParam(1, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -76,16 +76,16 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } $st = $db->prepare("UPDATE test SET some_bool_1=?, some_bool_2=?, some_int=? WHERE uid=?"); $values = [ - 'uid' => 6, - 'some_bool_1' => (bool) 0, - 'some_bool_2' => (bool) 1, - 'some_int' => 2, + 'uid' => 6, + 'some_bool_1' => (bool) 0, + 'some_bool_2' => (bool) 1, + 'some_int' => 2, ]; $st->bindParam(1, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -102,17 +102,17 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } // String true and false should fail $st = $db->prepare("UPDATE test SET some_bool_1=?, some_bool_2=?, some_int=? WHERE uid=?"); $values = [ - 'uid' => 6, - 'some_bool_1' => 'true', - 'some_bool_2' => 'false', - 'some_int' => 3, + 'uid' => 6, + 'some_bool_1' => 'true', + 'some_bool_2' => 'false', + 'some_int' => 3, ]; $st->bindParam(1, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -129,17 +129,17 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } // Null should not be treated as false $st = $db->prepare("UPDATE test SET some_bool_1=?, some_bool_2=?, some_int=? WHERE uid=?"); $values = [ - 'uid' => 6, - 'some_bool_1' => true, - 'some_bool_2' => null, - 'some_int' => 4, + 'uid' => 6, + 'some_bool_1' => true, + 'some_bool_2' => null, + 'some_int' => 4, ]; $st->bindParam(1, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -156,17 +156,17 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } // Integers converted correctly $st = $db->prepare("UPDATE test SET some_bool_1=?, some_bool_2=?, some_int=? WHERE uid=?"); $values = [ - 'uid' => 6, - 'some_bool_1' => 256, - 'some_bool_2' => 0, - 'some_int' => 5, + 'uid' => 6, + 'some_bool_1' => 256, + 'some_bool_2' => 0, + 'some_int' => 5, ]; $st->bindParam(1, $values['some_bool_1'], PDO::PARAM_BOOL); @@ -183,7 +183,7 @@ if ($result === false) { } foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } ?> diff --git a/ext/pdo_mysql/tests/bug_39858.phpt b/ext/pdo_mysql/tests/bug_39858.phpt index db8afa99b8..9328c0f20d 100644 --- a/ext/pdo_mysql/tests/bug_39858.phpt +++ b/ext/pdo_mysql/tests/bug_39858.phpt @@ -28,29 +28,29 @@ $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); function bug_39858($db) { - $db->exec("DROP PROCEDURE IF EXISTS p"); - $db->exec(" - CREATE PROCEDURE p() - NOT DETERMINISTIC - CONTAINS SQL - SQL SECURITY DEFINER - COMMENT '' - BEGIN - SELECT 2 * 2; - END;"); + $db->exec("DROP PROCEDURE IF EXISTS p"); + $db->exec(" + CREATE PROCEDURE p() + NOT DETERMINISTIC + CONTAINS SQL + SQL SECURITY DEFINER + COMMENT '' + BEGIN + SELECT 2 * 2; + END;"); - $stmt = $db->prepare("CALL p()"); - $stmt->execute(); - do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } while ($stmt->nextRowset()); + $stmt = $db->prepare("CALL p()"); + $stmt->execute(); + do { + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + } while ($stmt->nextRowset()); - $stmt = $db->prepare("CALL p()"); - $stmt->execute(); - do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } while ($stmt->nextRowset()); - $stmt->closeCursor(); + $stmt = $db->prepare("CALL p()"); + $stmt->execute(); + do { + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + } while ($stmt->nextRowset()); + $stmt->closeCursor(); } diff --git a/ext/pdo_mysql/tests/bug_41125.phpt b/ext/pdo_mysql/tests/bug_41125.phpt index e341ed409c..c86cad2b51 100644 --- a/ext/pdo_mysql/tests/bug_41125.phpt +++ b/ext/pdo_mysql/tests/bug_41125.phpt @@ -33,7 +33,7 @@ $sql = "CREATE TABLE IF NOT EXISTS test(id INT); INSERT INTO test(id) VALUES (1) // Compare MySQL C-API documentation $stmt = $db->query($sql); do { - var_dump($stmt->fetchAll()); + var_dump($stmt->fetchAll()); } while ($stmt->nextRowset()); print "done!"; diff --git a/ext/pdo_mysql/tests/bug_41997.phpt b/ext/pdo_mysql/tests/bug_41997.phpt index e3b52944be..def3d4406d 100644 --- a/ext/pdo_mysql/tests/bug_41997.phpt +++ b/ext/pdo_mysql/tests/bug_41997.phpt @@ -29,7 +29,7 @@ $db->exec('CREATE PROCEDURE p() BEGIN SELECT 1 AS "one"; END'); $stmt = $db->query("CALL p()"); do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); } while ($stmt->nextRowset()); var_dump($stmt->errorInfo()); diff --git a/ext/pdo_mysql/tests/bug_42499.phpt b/ext/pdo_mysql/tests/bug_42499.phpt index 244101a7ae..4ad38eeca2 100644 --- a/ext/pdo_mysql/tests/bug_42499.phpt +++ b/ext/pdo_mysql/tests/bug_42499.phpt @@ -26,16 +26,16 @@ $db = MySQLPDOTest::factory(); function bug_42499($db) { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec("CREATE TABLE test(id CHAR(1)); INSERT INTO test(id) VALUES ('a')"); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec("CREATE TABLE test(id CHAR(1)); INSERT INTO test(id) VALUES ('a')"); - $stmt = $db->query('SELECT id AS _id FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('SELECT id AS _id FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // You must not use exec() to run statements that create a result set! - $db->exec('SELECT id FROM test'); - // This will bail at you because you have not fetched the SELECT results: this is not a bug! - $db->exec("INSERT INTO test(id) VALUES ('b')"); + // You must not use exec() to run statements that create a result set! + $db->exec('SELECT id FROM test'); + // This will bail at you because you have not fetched the SELECT results: this is not a bug! + $db->exec("INSERT INTO test(id) VALUES ('b')"); } diff --git a/ext/pdo_mysql/tests/bug_44454.phpt b/ext/pdo_mysql/tests/bug_44454.phpt index d21cf3a4e2..e95904dda1 100644 --- a/ext/pdo_mysql/tests/bug_44454.phpt +++ b/ext/pdo_mysql/tests/bug_44454.phpt @@ -15,43 +15,43 @@ $db = PDOTest::test_factory(__DIR__ . '/common.phpt'); function bug_44454($db) { - try { + try { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))'); - $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))'); + $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); - $stmt = $db->query('SELECT a, b FROM test'); - printf("... SELECT has returned %d row...\n", $stmt->rowCount()); - while ($row = $stmt->fetch()) { - try { - printf("... INSERT should fail...\n"); - $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); - } catch (Exception $e) { - printf("... STMT - %s\n", var_export($stmt->errorCode(), true)); - printf("... PDO - %s\n", var_export($db->errorInfo(), true)); - } - } + $stmt = $db->query('SELECT a, b FROM test'); + printf("... SELECT has returned %d row...\n", $stmt->rowCount()); + while ($row = $stmt->fetch()) { + try { + printf("... INSERT should fail...\n"); + $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); + } catch (Exception $e) { + printf("... STMT - %s\n", var_export($stmt->errorCode(), true)); + printf("... PDO - %s\n", var_export($db->errorInfo(), true)); + } + } - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))'); - $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(a INT, b INT, UNIQUE KEY idx_ab (a, b))'); + $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); - } catch (Exception $e) { - printf("... While error %s\n", $e->getMessage()); ; - } + } catch (Exception $e) { + printf("... While error %s\n", $e->getMessage()); ; + } - $stmt = $db->query('SELECT a, b FROM test'); - printf("... SELECT has returned %d row...\n", $stmt->rowCount()); - foreach ($stmt as $row) { - try { - printf("... INSERT should fail...\n"); - $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); - } catch (Exception $e) { - printf("... STMT - %s\n", var_export($stmt->errorCode(), true)); - printf("... PDO - %s\n", var_export($db->errorInfo(), true)); - } - } + $stmt = $db->query('SELECT a, b FROM test'); + printf("... SELECT has returned %d row...\n", $stmt->rowCount()); + foreach ($stmt as $row) { + try { + printf("... INSERT should fail...\n"); + $db->exec('INSERT INTO test(a, b) VALUES (1, 1)'); + } catch (Exception $e) { + printf("... STMT - %s\n", var_export($stmt->errorCode(), true)); + printf("... PDO - %s\n", var_export($db->errorInfo(), true)); + } + } } diff --git a/ext/pdo_mysql/tests/bug_44707.phpt b/ext/pdo_mysql/tests/bug_44707.phpt index 60f4ccdfae..6bd7114431 100644 --- a/ext/pdo_mysql/tests/bug_44707.phpt +++ b/ext/pdo_mysql/tests/bug_44707.phpt @@ -28,32 +28,32 @@ $db = PDOTest::test_factory(__DIR__ . '/common.phpt'); function bug_44707($db) { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(id INT, mybool TINYINT)'); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(id INT, mybool TINYINT)'); - $id = 1; - $mybool = false; - var_dump($mybool); + $id = 1; + $mybool = false; + var_dump($mybool); - $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)'); - $stmt->bindParam(1, $id); - $stmt->bindParam(2, $mybool, PDO::PARAM_BOOL); - var_dump($mybool); + $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)'); + $stmt->bindParam(1, $id); + $stmt->bindParam(2, $mybool, PDO::PARAM_BOOL); + var_dump($mybool); - $stmt->execute(); - var_dump($mybool); + $stmt->execute(); + var_dump($mybool); - $stmt = $db->query('SELECT * FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('SELECT * FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)'); - $stmt->bindParam(1, $id); - // INT and integer work well together - $stmt->bindParam(2, $mybool, PDO::PARAM_INT); - $stmt->execute(); + $stmt = $db->prepare('INSERT INTO test(id, mybool) VALUES (?, ?)'); + $stmt->bindParam(1, $id); + // INT and integer work well together + $stmt->bindParam(2, $mybool, PDO::PARAM_INT); + $stmt->execute(); - $stmt = $db->query('SELECT * FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('SELECT * FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); } diff --git a/ext/pdo_mysql/tests/bug_45120.phpt b/ext/pdo_mysql/tests/bug_45120.phpt index bc2ea76629..b281a6a354 100644 --- a/ext/pdo_mysql/tests/bug_45120.phpt +++ b/ext/pdo_mysql/tests/bug_45120.phpt @@ -15,20 +15,20 @@ $db = PDOTest::test_factory(__DIR__ . '/common.phpt'); function bug_45120($db) { - $stmt = $db->prepare("SELECT 1 AS 'one'"); - if (true !== $stmt->execute()) - printf("[001] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare("SELECT 1 AS 'one'"); + if (true !== $stmt->execute()) + printf("[001] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); - $res = $stmt->fetch(PDO::FETCH_ASSOC); - if ($res['one'] != 1) - printf("[002] Wrong results: %s\n", var_export($res, true)); + $res = $stmt->fetch(PDO::FETCH_ASSOC); + if ($res['one'] != 1) + printf("[002] Wrong results: %s\n", var_export($res, true)); - if (true !== $stmt->execute()) - printf("[003] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); + if (true !== $stmt->execute()) + printf("[003] Execute has failed: %s\n", var_export($stmt->errorInfo(), true)); - $res = $stmt->fetch(PDO::FETCH_ASSOC); - if ($res['one'] != 1) - printf("[004] Wrong results: %s\n", var_export($res, true)); + $res = $stmt->fetch(PDO::FETCH_ASSOC); + if ($res['one'] != 1) + printf("[004] Wrong results: %s\n", var_export($res, true)); } diff --git a/ext/pdo_mysql/tests/bug_61207.phpt b/ext/pdo_mysql/tests/bug_61207.phpt index 346c1687e7..b8a6a21f09 100644 --- a/ext/pdo_mysql/tests/bug_61207.phpt +++ b/ext/pdo_mysql/tests/bug_61207.phpt @@ -26,9 +26,9 @@ $handle1->execute(); $i = 1; print("Handle 1:\n"); do { - print('Rowset ' . $i++ . "\n"); - if ($handle1->columnCount() > 0) - print("Results detected\n"); + print('Rowset ' . $i++ . "\n"); + if ($handle1->columnCount() > 0) + print("Results detected\n"); } while($handle1->nextRowset()); $handle2 = $db->prepare('select * from test where id = ?; @@ -42,9 +42,9 @@ $handle2->execute(); $i = 1; print("Handle 2:\n"); do { - print('Rowset ' . $i++ . "\n"); - if ($handle2->columnCount() > 0) - print("Results detected\n"); + print('Rowset ' . $i++ . "\n"); + if ($handle2->columnCount() > 0) + print("Results detected\n"); } while($handle2->nextRowset()); $handle3 = $db->prepare('update test set id = 2 where id = ?; @@ -58,9 +58,9 @@ $handle3->execute(); $i = 1; print("Handle 3:\n"); do { - print('Rowset ' . $i++ . "\n"); - if ($handle3->columnCount() > 0) - print("Results detected\n"); + print('Rowset ' . $i++ . "\n"); + if ($handle3->columnCount() > 0) + print("Results detected\n"); } while($handle3->nextRowset()); $handle4 = $db->prepare('insert into test(id) values(3); @@ -75,9 +75,9 @@ $handle4->execute(); $i = 1; print("Handle 4:\n"); do { - print('Rowset ' . $i++ . "\n"); - if ($handle1->columnCount() > 0) - print("Results detected\n"); + print('Rowset ' . $i++ . "\n"); + if ($handle1->columnCount() > 0) + print("Results detected\n"); } while($handle1->nextRowset()); $db->query("DROP TABLE test"); diff --git a/ext/pdo_mysql/tests/bug_61411.phpt b/ext/pdo_mysql/tests/bug_61411.phpt index f12804ab5f..920dc4e067 100644 --- a/ext/pdo_mysql/tests/bug_61411.phpt +++ b/ext/pdo_mysql/tests/bug_61411.phpt @@ -24,9 +24,9 @@ require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); $attr = getenv('PDOTEST_ATTR'); if (!$attr) { - $attr = array(); + $attr = array(); } else { - $attr = unserialize($attr); + $attr = unserialize($attr); } $attr[PDO::ATTR_PERSISTENT] = true; $attr[PDO::ATTR_EMULATE_PREPARES] = false; @@ -38,7 +38,7 @@ $stmt = $db->prepare("SELECT 1"); $stmt->execute(); foreach ($stmt as $line) { - var_dump($line); + var_dump($line); } print "done!"; diff --git a/ext/pdo_mysql/tests/bug_pecl_12925.phpt b/ext/pdo_mysql/tests/bug_pecl_12925.phpt index 361ef719d0..2075d14581 100644 --- a/ext/pdo_mysql/tests/bug_pecl_12925.phpt +++ b/ext/pdo_mysql/tests/bug_pecl_12925.phpt @@ -15,17 +15,17 @@ $db = MySQLPDOTest::factory(); function bug_pecl_1295($db) { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(id CHAR(1))'); - $db->exec("INSERT INTO test(id) VALUES ('a')"); - $stmt = $db->prepare("UPDATE test SET id = 'b'"); - $stmt->execute(); - $stmt = $db->prepare("UPDATE test SET id = 'c'"); - $stmt->execute(); - $stmt = $db->prepare('SELECT id FROM test'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt->closeCursor(); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(id CHAR(1))'); + $db->exec("INSERT INTO test(id) VALUES ('a')"); + $stmt = $db->prepare("UPDATE test SET id = 'b'"); + $stmt->execute(); + $stmt = $db->prepare("UPDATE test SET id = 'c'"); + $stmt->execute(); + $stmt = $db->prepare('SELECT id FROM test'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt->closeCursor(); } diff --git a/ext/pdo_mysql/tests/bug_pecl_7976.phpt b/ext/pdo_mysql/tests/bug_pecl_7976.phpt index 9eb50abd43..00446edc47 100644 --- a/ext/pdo_mysql/tests/bug_pecl_7976.phpt +++ b/ext/pdo_mysql/tests/bug_pecl_7976.phpt @@ -25,16 +25,16 @@ $db = MySQLPDOTest::factory(); function bug_pecl_7976($db) { - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p() BEGIN SELECT "1" AS _one; END;'); + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p() BEGIN SELECT "1" AS _one; END;'); - $stmt = $db->query('CALL p()'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt->closeCursor(); + $stmt = $db->query('CALL p()'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt->closeCursor(); - $stmt = $db->query('CALL p()'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt->closeCursor(); + $stmt = $db->query('CALL p()'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt->closeCursor(); } diff --git a/ext/pdo_mysql/tests/config.inc b/ext/pdo_mysql/tests/config.inc index f5ea020b78..d0a67ccd16 100644 --- a/ext/pdo_mysql/tests/config.inc +++ b/ext/pdo_mysql/tests/config.inc @@ -2,21 +2,21 @@ /* Overrule global settings, if need be */ if (false !== getenv('PDO_MYSQL_TEST_DSN')) { - # user set them from their shell - $config['ENV']['PDOTEST_DSN'] = getenv('PDO_MYSQL_TEST_DSN'); - $config['ENV']['PDOTEST_USER'] = getenv('PDO_MYSQL_TEST_USER'); - $config['ENV']['PDOTEST_PASS'] = getenv('PDO_MYSQL_TEST_PASS'); - if (false !== getenv('PDO_MYSQL_TEST_ATTR')) { - $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_MYSQL_TEST_ATTR'); - } + # user set them from their shell + $config['ENV']['PDOTEST_DSN'] = getenv('PDO_MYSQL_TEST_DSN'); + $config['ENV']['PDOTEST_USER'] = getenv('PDO_MYSQL_TEST_USER'); + $config['ENV']['PDOTEST_PASS'] = getenv('PDO_MYSQL_TEST_PASS'); + if (false !== getenv('PDO_MYSQL_TEST_ATTR')) { + $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_MYSQL_TEST_ATTR'); + } } else { - $config['ENV']['PDOTEST_DSN'] = 'mysql:host=localhost;dbname=test'; - $config['ENV']['PDOTEST_USER'] = 'root'; - $config['ENV']['PDOTEST_PASS'] = ''; + $config['ENV']['PDOTEST_DSN'] = 'mysql:host=localhost;dbname=test'; + $config['ENV']['PDOTEST_USER'] = 'root'; + $config['ENV']['PDOTEST_PASS'] = ''; } foreach ($config['ENV'] as $k => $v) { - putenv("$k=$v"); + putenv("$k=$v"); } /* MySQL specific settings */ @@ -31,22 +31,22 @@ define('PDO_MYSQL_TEST_PASS', (false !== getenv('PDO_MYSQL_TEST_PASS')) ? getenv define('PDO_MYSQL_TEST_CHARSET', (false !== getenv('PDO_MYSQL_TEST_CHARSET')) ? getenv('PDO_MYSQL_TEST_CHARSET') : NULL); if (!function_exists('sys_get_temp_dir')) { - function sys_get_temp_dir() { + function sys_get_temp_dir() { - if (!empty($_ENV['TMP'])) - return realpath( $_ENV['TMP'] ); - if (!empty($_ENV['TMPDIR'])) - return realpath( $_ENV['TMPDIR'] ); - if (!empty($_ENV['TEMP'])) - return realpath( $_ENV['TEMP'] ); + if (!empty($_ENV['TMP'])) + return realpath( $_ENV['TMP'] ); + if (!empty($_ENV['TMPDIR'])) + return realpath( $_ENV['TMPDIR'] ); + if (!empty($_ENV['TEMP'])) + return realpath( $_ENV['TEMP'] ); - $temp_file = tempnam(md5(uniqid(rand(), TRUE)), ''); - if ($temp_file) { - $temp_dir = realpath(dirname($temp_file)); - unlink($temp_file); - return $temp_dir; - } - return FALSE; - } + $temp_file = tempnam(md5(uniqid(rand(), TRUE)), ''); + if ($temp_file) { + $temp_dir = realpath(dirname($temp_file)); + unlink($temp_file); + return $temp_dir; + } + return FALSE; + } } ?> diff --git a/ext/pdo_mysql/tests/mysql_pdo_test.inc b/ext/pdo_mysql/tests/mysql_pdo_test.inc index 65ad7b2d17..880f8dbf75 100644 --- a/ext/pdo_mysql/tests/mysql_pdo_test.inc +++ b/ext/pdo_mysql/tests/mysql_pdo_test.inc @@ -4,174 +4,174 @@ require_once(dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'); class MySQLPDOTest extends PDOTest { - static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null, $mydsn = null) { - - $dsn = self::getDSN($mydsn); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - $attr = getenv('PDOTEST_ATTR'); - - if (is_string($attr) && strlen($attr)) { - $attr = unserialize($attr); - } else { - $attr = null; - } - if ($user === false) - $user = NULL; - if ($pass === false) - $pass = NULL; - - $db = new $classname($dsn, $user, $pass, $attr); - if (!$db) { - die("Could not create PDO object (DSN=$dsn, user=$user)\n"); - } - - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); - $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); - - return $db; - } - - static function createTestTable($db, $engine = null) { - if (!$engine) - $engine = PDO_MYSQL_TEST_ENGINE; - - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine); - $db->exec("INSERT INTO test(id, label) VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f')"); - } - - static function getTableEngine() { - return PDO_MYSQL_TEST_ENGINE; - } - - - static function getDSN($new_options = null, $addition = '') { - if (!$new_options) - return PDO_MYSQL_TEST_DSN . $addition; - - $old_options = array(); - $dsn = substr(PDO_MYSQL_TEST_DSN, - strpos(PDO_MYSQL_TEST_DSN, ':') + 1, - strlen(PDO_MYSQL_TEST_DSN)); - - // no real parser - any exotic setting can fool us - $parts = explode(';', $dsn); - foreach ($parts as $k => $v) { - $tmp = explode('=', $v); - if (count($tmp) == 2) - $old_options[$tmp[0]] = $tmp[1]; - } - - $options = $old_options; - foreach ($new_options as $k => $v) - $options[$k] = $v; - - $dsn = 'mysql:'; - foreach ($options as $k => $v) - $dsn .= sprintf('%s=%s;', $k, $v); - - if ($addition) - $dsn .= $addition; - else - $dsn = substr($dsn, 0, strlen($dsn) -1); - - return $dsn; - } - - static function getClientVersion($db) { - return self::extractVersion($db->getAttribute(PDO::ATTR_CLIENT_VERSION)); - } - - static function getServerVersion($db) { - return self::extractVersion($db->getAttribute(PDO::ATTR_SERVER_VERSION)); - } - - static function extractVersion($version_string) { - /* - TODO: - We're a bit in trouble: PDO_MYSQL returns version strings. - That's wrong according to the manual. According to the manual - integers should be returned. However, this code needs to work - with stinky PDO_MYSQL and hopefully better PDO_MYSQLND. - */ - - // already an int value? - if (is_int($version_string)) - return $version_string; - - // string but int value? - $tmp = (int)$version_string; - if (((string)$tmp) === $version_string) - return $tmp; - - // stinky string which we need to parse - $parts = explode('.', $version_string); - if (count($parts) < 3) - return -1; - - $version = (int)$parts[0] * 10000; - $version+= (int)$parts[1] * 100; - $version+= (int)$parts[2]; - - return $version; - } - - static function getTempDir() { - - if (!function_exists('sys_get_temp_dir')) { - - if (!empty($_ENV['TMP'])) - return realpath( $_ENV['TMP'] ); - if (!empty($_ENV['TMPDIR'])) - return realpath( $_ENV['TMPDIR'] ); - if (!empty($_ENV['TEMP'])) - return realpath( $_ENV['TEMP'] ); - - $temp_file = tempnam(md5(uniqid(rand(), TRUE)), ''); - if ($temp_file) { - $temp_dir = realpath(dirname($temp_file)); - unlink($temp_file); - return $temp_dir; - } - return FALSE; - } else { - return sys_get_temp_dir(); - } - - } - - static function detect_transactional_mysql_engine($db) { - foreach ($db->query("show variables like 'have%'") as $row) { - if (!empty($row) && $row[1] == 'YES' && ($row[0] == 'have_innodb' || $row[0] == 'have_bdb')) { - return str_replace("have_", "", $row[0]); - } - } - /* MySQL 5.6.1+ */ - foreach ($db->query("SHOW ENGINES") as $row) { - if (isset($row['engine']) && isset($row['support'])) { - if ('InnoDB' == $row['engine'] && ('YES' == $row['support'] || 'DEFAULT' == $row['support'])) - return 'innodb'; - } - } - return false; - } - - static function isPDOMySQLnd() { - ob_start(); - phpinfo(); - $tmp = ob_get_contents(); - ob_end_clean(); - return (preg_match('/PDO Driver for MySQL.*enabled/', $tmp) && - preg_match('/Client API version.*mysqlnd/', $tmp)); - } - - static function dropTestTable($db = NULL) { - if (is_null($db)) - $db = self::factory(); - - $db->exec('DROP TABLE IF EXISTS test'); - } + static function factory($classname = 'PDO', $drop_test_tables = false, $myattr = null, $mydsn = null) { + + $dsn = self::getDSN($mydsn); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + $attr = getenv('PDOTEST_ATTR'); + + if (is_string($attr) && strlen($attr)) { + $attr = unserialize($attr); + } else { + $attr = null; + } + if ($user === false) + $user = NULL; + if ($pass === false) + $pass = NULL; + + $db = new $classname($dsn, $user, $pass, $attr); + if (!$db) { + die("Could not create PDO object (DSN=$dsn, user=$user)\n"); + } + + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER); + + return $db; + } + + static function createTestTable($db, $engine = null) { + if (!$engine) + $engine = PDO_MYSQL_TEST_ENGINE; + + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine); + $db->exec("INSERT INTO test(id, label) VALUES (1, 'a'), (2, 'b'), (3, 'c'), (4, 'd'), (5, 'e'), (6, 'f')"); + } + + static function getTableEngine() { + return PDO_MYSQL_TEST_ENGINE; + } + + + static function getDSN($new_options = null, $addition = '') { + if (!$new_options) + return PDO_MYSQL_TEST_DSN . $addition; + + $old_options = array(); + $dsn = substr(PDO_MYSQL_TEST_DSN, + strpos(PDO_MYSQL_TEST_DSN, ':') + 1, + strlen(PDO_MYSQL_TEST_DSN)); + + // no real parser - any exotic setting can fool us + $parts = explode(';', $dsn); + foreach ($parts as $k => $v) { + $tmp = explode('=', $v); + if (count($tmp) == 2) + $old_options[$tmp[0]] = $tmp[1]; + } + + $options = $old_options; + foreach ($new_options as $k => $v) + $options[$k] = $v; + + $dsn = 'mysql:'; + foreach ($options as $k => $v) + $dsn .= sprintf('%s=%s;', $k, $v); + + if ($addition) + $dsn .= $addition; + else + $dsn = substr($dsn, 0, strlen($dsn) -1); + + return $dsn; + } + + static function getClientVersion($db) { + return self::extractVersion($db->getAttribute(PDO::ATTR_CLIENT_VERSION)); + } + + static function getServerVersion($db) { + return self::extractVersion($db->getAttribute(PDO::ATTR_SERVER_VERSION)); + } + + static function extractVersion($version_string) { + /* + TODO: + We're a bit in trouble: PDO_MYSQL returns version strings. + That's wrong according to the manual. According to the manual + integers should be returned. However, this code needs to work + with stinky PDO_MYSQL and hopefully better PDO_MYSQLND. + */ + + // already an int value? + if (is_int($version_string)) + return $version_string; + + // string but int value? + $tmp = (int)$version_string; + if (((string)$tmp) === $version_string) + return $tmp; + + // stinky string which we need to parse + $parts = explode('.', $version_string); + if (count($parts) < 3) + return -1; + + $version = (int)$parts[0] * 10000; + $version+= (int)$parts[1] * 100; + $version+= (int)$parts[2]; + + return $version; + } + + static function getTempDir() { + + if (!function_exists('sys_get_temp_dir')) { + + if (!empty($_ENV['TMP'])) + return realpath( $_ENV['TMP'] ); + if (!empty($_ENV['TMPDIR'])) + return realpath( $_ENV['TMPDIR'] ); + if (!empty($_ENV['TEMP'])) + return realpath( $_ENV['TEMP'] ); + + $temp_file = tempnam(md5(uniqid(rand(), TRUE)), ''); + if ($temp_file) { + $temp_dir = realpath(dirname($temp_file)); + unlink($temp_file); + return $temp_dir; + } + return FALSE; + } else { + return sys_get_temp_dir(); + } + + } + + static function detect_transactional_mysql_engine($db) { + foreach ($db->query("show variables like 'have%'") as $row) { + if (!empty($row) && $row[1] == 'YES' && ($row[0] == 'have_innodb' || $row[0] == 'have_bdb')) { + return str_replace("have_", "", $row[0]); + } + } + /* MySQL 5.6.1+ */ + foreach ($db->query("SHOW ENGINES") as $row) { + if (isset($row['engine']) && isset($row['support'])) { + if ('InnoDB' == $row['engine'] && ('YES' == $row['support'] || 'DEFAULT' == $row['support'])) + return 'innodb'; + } + } + return false; + } + + static function isPDOMySQLnd() { + ob_start(); + phpinfo(); + $tmp = ob_get_contents(); + ob_end_clean(); + return (preg_match('/PDO Driver for MySQL.*enabled/', $tmp) && + preg_match('/Client API version.*mysqlnd/', $tmp)); + } + + static function dropTestTable($db = NULL) { + if (is_null($db)) + $db = self::factory(); + + $db->exec('DROP TABLE IF EXISTS test'); + } } ?> diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt index b849f274be..2231f8b449 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct.phpt @@ -8,289 +8,289 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - function tryandcatch($offset, $code) { - - try { - eval($code); - assert(sprintf("[%03d] Should have failed\n", $offset) != ''); - } catch (PDOException $e) { - return sprintf("[%03d] %s, [%s] %s\n", - $offset, - $e->getMessage(), - (isset($db) && is_object($db)) ? $db->errorCode() : 'n/a', - (isset($db) && is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } - - return ''; - } - - try { - - try { - if (NULL !== ($db = @new PDO())) - printf("[001] Too few parameters\n"); - } catch (TypeError $ex) { - } - - print tryandcatch(2, '$db = new PDO(chr(0));'); - print tryandcatch(3, '$db = new PDO("a" . chr(0) . "b");'); - print tryandcatch(4, '$db = new PDO("MYSQL");'); - print tryandcatch(5, '$db = new PDO("mysql");'); - print tryandcatch(6, '$db = new PDO("mysql ");'); - print tryandcatch(7, '$db = new PDO("fantasyandfriends :");'); - - $dsn = PDO_MYSQL_TEST_DSN; - // MySQL Server might accept anonymous connections, don't - // print anything - tryandcatch(8, '$db = new PDO("' . $dsn . '");'); - - $user = 'dontcreatesuchauser'; - $pass = 'withthispassword'; - print tryandcatch(9, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); - - // should fail - $dsn = 'mysql:'; - // don't print the message since it can be different - tryandcatch(10, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); - - $dsn = PDO_MYSQL_TEST_DSN; - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - // should work... - $db = new PDO($dsn, $user, $pass); - - // Reaction on host not specified differs for different configs, so no printing - $dsn = 'mysql:invalid=foo'; - tryandcatch(11, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); - - $dsn = 'mysql:' . str_repeat('howmuch=canpdoeat;', 1000); - tryandcatch(12, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); - - $dsn = 'mysql:' . str_repeat('abcdefghij', 1024 * 10) . '=somevalue'; - tryandcatch(13, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); - - if (PDO_MYSQL_TEST_HOST) { - $host = PDO_MYSQL_TEST_HOST; - $invalid_host = $host . 'invalid'; - - // last host specification should be the one used - $dsn = MySQLPDOTest::getDSN(array('host' => $host), 'host=' . $invalid_host); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) - printf("[014] Cannot find proper error codes: %s\n", $tmp); - } - - $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host), 'host=' . $host); - try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { - printf("[015] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - $invalid_host = '-' . chr(0); - - $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host)); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) - printf("[016] Cannot find proper error codes: %s\n", $tmp); - } - - // parsing should not get confused by chr(0) - $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host), 'host=' . $host); - try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { - printf("[017] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - } - - // what about long values for a valid option ... - // hostnames > 1024 chars break on some NIS-enabled FreeBSD... - $dsn = MySQLPDOTest::getDSN(array('host' => str_repeat('0123456789', 100))); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) - printf("[018] Cannot find proper error codes: %s\n", $tmp); - } - - if (PDO_MYSQL_TEST_PORT && (PDO_MYSQL_TEST_SOCKET == '')) { - // Playing with the port makes only sense if no socket gets used - - $port = PDO_MYSQL_TEST_PORT; - // let's hope we don't hit a MySQL running on that port... - $invalid_port = $port * 2; - - $dsn = MySQLPDOTest::getDSN(array('port' => $port), 'port=' . $invalid_port); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005')) - printf("[019] Cannot find proper error codes: %s\n", $tmp); - } - - $dsn = MySQLPDOTest::getDSN(array('port' => $invalid_port), 'port=' . $port); - try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { - printf("[020] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - $invalid_port = 'abc'; - $dsn = MySQLPDOTest::getDSN(array('port' => $port), 'port=' . $invalid_port); - try { - $db = @new PDO($dsn, $user, $pass); - // atoi('abc') = 0, 0 -> fallback to default 3306 -> may or may not fail! - } catch (PDOException $e) { - } - - } - - if (PDO_MYSQL_TEST_DB) { - $db = PDO_MYSQL_TEST_DB; - $invalid_db = 'letshopeitdoesnotexist'; - - $dsn = MySQLPDOTest::getDSN(array('dbname' => $db), 'dbname=' . $invalid_db); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, '42000') && !stristr($tmp, '1049')) - printf("[022] Cannot find proper error codes: %s\n", $tmp); - } - - $dsn = MySQLPDOTest::getDSN(array('dbname' => $invalid_db), 'dbname=' . $db); - try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { - printf("[023] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - } - - if (PDO_MYSQL_TEST_SOCKET && (stristr(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_SOCKET) !== false)) { - $socket = PDO_MYSQL_TEST_SOCKET; - $invalid_socket = '/lets/hope/it/does/not/exist'; - - $dsn = MySQLPDOTest::getDSN(array('unix_socket' => $socket), 'unix_socket=' . $invalid_socket); - try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { - $tmp = $e->getMessage(); - if (!stristr($tmp, 'HY000') && !stristr($tmp, '2002')) - printf("[024] Cannot find proper error codes: %s\n", $tmp); - } - - $dsn = MySQLPDOTest::getDSN(array('unix_socket' => $invalid_socket), 'unix_socket=' . $socket); - try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { - printf("[025] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - } - - $have_charset_support = false; - $dsn = MySQLPDOTest::getDSN(); - try { - $db = new PDO($dsn, $user, $pass); - $stmt = $db->query('SELECT VERSION() as _version'); - $version = $stmt->fetch(PDO::FETCH_ASSOC); - - $tmp = explode('.', $version['_version']); - if ((count($tmp) == 3) && - (($tmp[0] >= 4 && $tmp[1] >= 1) || ($tmp[0] >= 5))) { - // MySQL Server 4.1 - charset support available - $have_charset_support = true; - } - - } catch (PDOException $e) { - printf("[026] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - - if (PDO_MYSQL_TEST_CHARSET) { - $charset = PDO_MYSQL_TEST_CHARSET; - $invalid_charset = 'invalid'; - - if ($have_charset_support) { - $dsn = MySQLPDOTest::getDSN(); - $db = new PDO($dsn, $user, $pass); - $stmt = $db->query(sprintf('SHOW CHARACTER SET LIKE "%s"', $charset)); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $have_charset = (empty($tmp)) ? false : true; - - if ($have_charset) { - $dsn = MySQLPDOTest::getDSN(array('charset' => $charset), 'charset=' . $invalid_charset); - try { - $db = @new PDO($dsn, $user, $pass); - /* NOTE: MySQL does a fallback to the charset suggested during the handshake - no error - no bug! */ - } catch (PDOException $e) { - $tmp = $e->getMessage(); - /* TODO: add proper codes */ - if (!stristr($tmp, 'sqlstatecode') || !stristr($tmp, 'mysqlinternalerrcode')) - printf("[027] TODO - Cannot find proper error codes: %s\n", $tmp); - } - - $dsn = MySQLPDOTest::getDSN(array('charset' => $invalid_charset), 'charset=' . $charset); - try { - $db = @new PDO($dsn, $user, $pass); - /* Strictly speaking we should test more: character_set_client, character_set_results, and character_set_connection */ - $stmt = $db->query('SELECT @@character_set_connection AS _charset'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['_charset'] != $charset) - printf("[028] Character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", - $tmp['_charset'], $charset); - } catch (PDOException $e) { - printf("[029] DSN=%s, %s\n", $dsn, $e->getMessage()); - } - } else { - printf("[030] You're trying to run the tests with charset '%s' which seems not supported by the server!", $charset); - } - - } - - } - - if ($have_charset_support) { - // In case the PDO_MYSQL_TEST_CHARSET interferes with any defaults - // we do another test to verify that the charset has been set. - $dsn = MySQLPDOTest::getDSN(); - $db = new PDO($dsn, $user, $pass); - $stmt = $db->query('SHOW CHARACTER SET LIKE "latin1"'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $have_latin1 =(empty($tmp)) ? false : true; - $stmt = $db->query('SHOW CHARACTER SET LIKE "latin2"'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $have_latin2 =(empty($tmp)) ? false : true; - - if ($have_latin1 && $have_latin2) { - // very likely we do have both of them... - try { - $dsn = MySQLPDOTest::getDSN(array('charset' => 'latin1')); - $db = new PDO($dsn, $user, $pass); - $stmt = $db->query('SELECT @@character_set_connection AS _charset'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['_charset'] != 'latin1') - printf("[031] DSN = %s, Character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", - $dsn, $tmp['_charset'], 'latin1'); - - } catch (PDOException $e) { - printf("[032] %s\n", $e->getMessage()); - } - - try { - $dsn = MySQLPDOTest::getDSN(array('charset' => 'latin2')); - $db = new PDO($dsn, $user, $pass); - $stmt = $db->query('SELECT @@character_set_connection AS _charset'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['_charset'] != 'latin2') - printf("[033] DSN = %s, character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", - $dsn, $tmp['_charset'], 'latin2'); - - } catch (PDOException $e) { - printf("[034] %s\n", $e->getMessage()); - } - - } - } - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + function tryandcatch($offset, $code) { + + try { + eval($code); + assert(sprintf("[%03d] Should have failed\n", $offset) != ''); + } catch (PDOException $e) { + return sprintf("[%03d] %s, [%s] %s\n", + $offset, + $e->getMessage(), + (isset($db) && is_object($db)) ? $db->errorCode() : 'n/a', + (isset($db) && is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } + + return ''; + } + + try { + + try { + if (NULL !== ($db = @new PDO())) + printf("[001] Too few parameters\n"); + } catch (TypeError $ex) { + } + + print tryandcatch(2, '$db = new PDO(chr(0));'); + print tryandcatch(3, '$db = new PDO("a" . chr(0) . "b");'); + print tryandcatch(4, '$db = new PDO("MYSQL");'); + print tryandcatch(5, '$db = new PDO("mysql");'); + print tryandcatch(6, '$db = new PDO("mysql ");'); + print tryandcatch(7, '$db = new PDO("fantasyandfriends :");'); + + $dsn = PDO_MYSQL_TEST_DSN; + // MySQL Server might accept anonymous connections, don't + // print anything + tryandcatch(8, '$db = new PDO("' . $dsn . '");'); + + $user = 'dontcreatesuchauser'; + $pass = 'withthispassword'; + print tryandcatch(9, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); + + // should fail + $dsn = 'mysql:'; + // don't print the message since it can be different + tryandcatch(10, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); + + $dsn = PDO_MYSQL_TEST_DSN; + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + // should work... + $db = new PDO($dsn, $user, $pass); + + // Reaction on host not specified differs for different configs, so no printing + $dsn = 'mysql:invalid=foo'; + tryandcatch(11, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); + + $dsn = 'mysql:' . str_repeat('howmuch=canpdoeat;', 1000); + tryandcatch(12, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); + + $dsn = 'mysql:' . str_repeat('abcdefghij', 1024 * 10) . '=somevalue'; + tryandcatch(13, '$db = new PDO("' . $dsn . '", "' . $user . '", "' . $pass . '");'); + + if (PDO_MYSQL_TEST_HOST) { + $host = PDO_MYSQL_TEST_HOST; + $invalid_host = $host . 'invalid'; + + // last host specification should be the one used + $dsn = MySQLPDOTest::getDSN(array('host' => $host), 'host=' . $invalid_host); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) + printf("[014] Cannot find proper error codes: %s\n", $tmp); + } + + $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host), 'host=' . $host); + try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { + printf("[015] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + $invalid_host = '-' . chr(0); + + $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host)); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) + printf("[016] Cannot find proper error codes: %s\n", $tmp); + } + + // parsing should not get confused by chr(0) + $dsn = MySQLPDOTest::getDSN(array('host' => $invalid_host), 'host=' . $host); + try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { + printf("[017] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + } + + // what about long values for a valid option ... + // hostnames > 1024 chars break on some NIS-enabled FreeBSD... + $dsn = MySQLPDOTest::getDSN(array('host' => str_repeat('0123456789', 100))); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005') && !stristr($tmp, '2002')) + printf("[018] Cannot find proper error codes: %s\n", $tmp); + } + + if (PDO_MYSQL_TEST_PORT && (PDO_MYSQL_TEST_SOCKET == '')) { + // Playing with the port makes only sense if no socket gets used + + $port = PDO_MYSQL_TEST_PORT; + // let's hope we don't hit a MySQL running on that port... + $invalid_port = $port * 2; + + $dsn = MySQLPDOTest::getDSN(array('port' => $port), 'port=' . $invalid_port); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, 'HY000') && !stristr($tmp, '2005')) + printf("[019] Cannot find proper error codes: %s\n", $tmp); + } + + $dsn = MySQLPDOTest::getDSN(array('port' => $invalid_port), 'port=' . $port); + try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { + printf("[020] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + $invalid_port = 'abc'; + $dsn = MySQLPDOTest::getDSN(array('port' => $port), 'port=' . $invalid_port); + try { + $db = @new PDO($dsn, $user, $pass); + // atoi('abc') = 0, 0 -> fallback to default 3306 -> may or may not fail! + } catch (PDOException $e) { + } + + } + + if (PDO_MYSQL_TEST_DB) { + $db = PDO_MYSQL_TEST_DB; + $invalid_db = 'letshopeitdoesnotexist'; + + $dsn = MySQLPDOTest::getDSN(array('dbname' => $db), 'dbname=' . $invalid_db); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, '42000') && !stristr($tmp, '1049')) + printf("[022] Cannot find proper error codes: %s\n", $tmp); + } + + $dsn = MySQLPDOTest::getDSN(array('dbname' => $invalid_db), 'dbname=' . $db); + try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { + printf("[023] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + } + + if (PDO_MYSQL_TEST_SOCKET && (stristr(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_SOCKET) !== false)) { + $socket = PDO_MYSQL_TEST_SOCKET; + $invalid_socket = '/lets/hope/it/does/not/exist'; + + $dsn = MySQLPDOTest::getDSN(array('unix_socket' => $socket), 'unix_socket=' . $invalid_socket); + try { $db = @new PDO($dsn, $user, $pass); assert(false); printf("%s\n", $dsn); } catch (PDOException $e) { + $tmp = $e->getMessage(); + if (!stristr($tmp, 'HY000') && !stristr($tmp, '2002')) + printf("[024] Cannot find proper error codes: %s\n", $tmp); + } + + $dsn = MySQLPDOTest::getDSN(array('unix_socket' => $invalid_socket), 'unix_socket=' . $socket); + try { $db = @new PDO($dsn, $user, $pass); } catch (PDOException $e) { + printf("[025] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + } + + $have_charset_support = false; + $dsn = MySQLPDOTest::getDSN(); + try { + $db = new PDO($dsn, $user, $pass); + $stmt = $db->query('SELECT VERSION() as _version'); + $version = $stmt->fetch(PDO::FETCH_ASSOC); + + $tmp = explode('.', $version['_version']); + if ((count($tmp) == 3) && + (($tmp[0] >= 4 && $tmp[1] >= 1) || ($tmp[0] >= 5))) { + // MySQL Server 4.1 - charset support available + $have_charset_support = true; + } + + } catch (PDOException $e) { + printf("[026] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + + if (PDO_MYSQL_TEST_CHARSET) { + $charset = PDO_MYSQL_TEST_CHARSET; + $invalid_charset = 'invalid'; + + if ($have_charset_support) { + $dsn = MySQLPDOTest::getDSN(); + $db = new PDO($dsn, $user, $pass); + $stmt = $db->query(sprintf('SHOW CHARACTER SET LIKE "%s"', $charset)); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $have_charset = (empty($tmp)) ? false : true; + + if ($have_charset) { + $dsn = MySQLPDOTest::getDSN(array('charset' => $charset), 'charset=' . $invalid_charset); + try { + $db = @new PDO($dsn, $user, $pass); + /* NOTE: MySQL does a fallback to the charset suggested during the handshake - no error - no bug! */ + } catch (PDOException $e) { + $tmp = $e->getMessage(); + /* TODO: add proper codes */ + if (!stristr($tmp, 'sqlstatecode') || !stristr($tmp, 'mysqlinternalerrcode')) + printf("[027] TODO - Cannot find proper error codes: %s\n", $tmp); + } + + $dsn = MySQLPDOTest::getDSN(array('charset' => $invalid_charset), 'charset=' . $charset); + try { + $db = @new PDO($dsn, $user, $pass); + /* Strictly speaking we should test more: character_set_client, character_set_results, and character_set_connection */ + $stmt = $db->query('SELECT @@character_set_connection AS _charset'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['_charset'] != $charset) + printf("[028] Character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", + $tmp['_charset'], $charset); + } catch (PDOException $e) { + printf("[029] DSN=%s, %s\n", $dsn, $e->getMessage()); + } + } else { + printf("[030] You're trying to run the tests with charset '%s' which seems not supported by the server!", $charset); + } + + } + + } + + if ($have_charset_support) { + // In case the PDO_MYSQL_TEST_CHARSET interferes with any defaults + // we do another test to verify that the charset has been set. + $dsn = MySQLPDOTest::getDSN(); + $db = new PDO($dsn, $user, $pass); + $stmt = $db->query('SHOW CHARACTER SET LIKE "latin1"'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $have_latin1 =(empty($tmp)) ? false : true; + $stmt = $db->query('SHOW CHARACTER SET LIKE "latin2"'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $have_latin2 =(empty($tmp)) ? false : true; + + if ($have_latin1 && $have_latin2) { + // very likely we do have both of them... + try { + $dsn = MySQLPDOTest::getDSN(array('charset' => 'latin1')); + $db = new PDO($dsn, $user, $pass); + $stmt = $db->query('SELECT @@character_set_connection AS _charset'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['_charset'] != 'latin1') + printf("[031] DSN = %s, Character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", + $dsn, $tmp['_charset'], 'latin1'); + + } catch (PDOException $e) { + printf("[032] %s\n", $e->getMessage()); + } + + try { + $dsn = MySQLPDOTest::getDSN(array('charset' => 'latin2')); + $db = new PDO($dsn, $user, $pass); + $stmt = $db->query('SELECT @@character_set_connection AS _charset'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['_charset'] != 'latin2') + printf("[033] DSN = %s, character sets has not been set, @@character_set_connection reports '%s', expecting '%s'", + $dsn, $tmp['_charset'], 'latin2'); + + } catch (PDOException $e) { + printf("[034] %s\n", $e->getMessage()); + } + + } + } + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } + + print "done!"; ?> --EXPECTF-- [002] invalid data source name, [n/a] n/a diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_ini.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_ini.phpt index a03ad7f324..985179b84c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct_ini.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct_ini.phpt @@ -13,43 +13,43 @@ if (getenv('PDO_MYSQL_TEST_DSN') !== "mysql:dbname=phptest;unix_socket=/tmp/mysq pdo.dsn.mysql="mysql:dbname=phptest;socket=/tmp/mysql.sock" --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - $found = false; - $values = ini_get_all(); - foreach ($values as $name => $dsn) - if ('pdo.dsn.mysql' == $name) { - printf("pdo.dsn.mysql=%s\n", $dsn); - $found = true; - break; - } - - if (!$found) { - $dsn = ini_get('pdo.dsn.mysql'); - $found = ($dsn !== false); - } - - if (!$found) - printf("pdo.dsn.mysql cannot be accessed through ini_get_all()/ini_get()\n"); - - if (MySQLPDOTest::getDSN() == $dsn) { - // we are lucky, we can run the test - try { - - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - $db = new PDO('mysql', $user, $pass); - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } - - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + $found = false; + $values = ini_get_all(); + foreach ($values as $name => $dsn) + if ('pdo.dsn.mysql' == $name) { + printf("pdo.dsn.mysql=%s\n", $dsn); + $found = true; + break; + } + + if (!$found) { + $dsn = ini_get('pdo.dsn.mysql'); + $found = ($dsn !== false); + } + + if (!$found) + printf("pdo.dsn.mysql cannot be accessed through ini_get_all()/ini_get()\n"); + + if (MySQLPDOTest::getDSN() == $dsn) { + // we are lucky, we can run the test + try { + + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + $db = new PDO('mysql', $user, $pass); + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } + + } + + print "done!"; ?> --EXPECT-- pdo.dsn.mysql cannot be accessed through ini_get_all()/ini_get() diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt index b7a52127c5..ac5f7f6911 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct_options.phpt @@ -8,160 +8,160 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - function set_option_and_check($offset, $option, $value, $option_desc) { - - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - - try { - $db = new PDO($dsn, $user, $pass, array($option => $value)); - if (!is_object($db) || ($value !== ($tmp = @$db->getAttribute($option)))) - printf("[%03d] Expecting '%s'/%s got '%s'/%s' for options '%s'\n", - $offset, - $value, gettype($value), - $tmp, gettype($tmp), - $option_desc); - } catch (PDOException $e) { - printf("[%03d] %s\n", $offset, $e->getMessage()); - } - - } - - try { - - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - - $valid_options = array( - /* pdo_dbh.c */ - PDO::ATTR_PERSISTENT => 'PDO::ATTR_PERSISTENT', - PDO::ATTR_AUTOCOMMIT => 'PDO::ATTR_AUTOCOMMIT', - /* mysql_driver.c */ - /* TODO Possible bug PDO::ATTR_TIMEOUT != MYSQLI_OPT_CONNECT_TIMEOUT*/ - PDO::ATTR_TIMEOUT => 'PDO::ATTR_TIMEOUT', - PDO::ATTR_EMULATE_PREPARES => 'PDO::ATTR_EMULATE_PREPARES', - - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY', - PDO::MYSQL_ATTR_LOCAL_INFILE => 'PDO::MYSQL_ATTR_LOCAL_INFILE', - PDO::MYSQL_ATTR_DIRECT_QUERY => 'PDO::MYSQL_ATTR_DIRECT_QUERY', - - PDO::MYSQL_ATTR_INIT_COMMAND => 'PDO::MYSQL_ATTR_INIT_COMMAND', - PDO::ATTR_EMULATE_PREPARES => 'PDO::ATTR_EMULATE_PREPARES', - ); - - $defaults = array( - PDO::ATTR_PERSISTENT => false, - PDO::ATTR_AUTOCOMMIT => 1, - /* TODO - why is this a valid option if getAttribute() does not support it?! */ - PDO::ATTR_TIMEOUT => false, - PDO::ATTR_EMULATE_PREPARES => 1, - PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => 1, - /* TODO getAttribute() does not handle it */ - PDO::MYSQL_ATTR_LOCAL_INFILE => false, - /* TODO getAttribute() does not handle it */ - PDO::MYSQL_ATTR_DIRECT_QUERY => 1, - PDO::MYSQL_ATTR_INIT_COMMAND => '', - ); - - try { - if (NULL !== ($db = @new PDO($dsn, $user, $pass, 'wrong type'))) - printf("[001] Expecting NULL got %s/%s\n", gettype($db), $db); - } catch (TypeError $e) { - } - - if (!is_object($db = new PDO($dsn, $user, $pass, array()))) - printf("[002] Expecting object got %s/%s¸\n", gettype($db), $db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + function set_option_and_check($offset, $option, $value, $option_desc) { + + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + + try { + $db = new PDO($dsn, $user, $pass, array($option => $value)); + if (!is_object($db) || ($value !== ($tmp = @$db->getAttribute($option)))) + printf("[%03d] Expecting '%s'/%s got '%s'/%s' for options '%s'\n", + $offset, + $value, gettype($value), + $tmp, gettype($tmp), + $option_desc); + } catch (PDOException $e) { + printf("[%03d] %s\n", $offset, $e->getMessage()); + } + + } + + try { + + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + + $valid_options = array( + /* pdo_dbh.c */ + PDO::ATTR_PERSISTENT => 'PDO::ATTR_PERSISTENT', + PDO::ATTR_AUTOCOMMIT => 'PDO::ATTR_AUTOCOMMIT', + /* mysql_driver.c */ + /* TODO Possible bug PDO::ATTR_TIMEOUT != MYSQLI_OPT_CONNECT_TIMEOUT*/ + PDO::ATTR_TIMEOUT => 'PDO::ATTR_TIMEOUT', + PDO::ATTR_EMULATE_PREPARES => 'PDO::ATTR_EMULATE_PREPARES', + + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY', + PDO::MYSQL_ATTR_LOCAL_INFILE => 'PDO::MYSQL_ATTR_LOCAL_INFILE', + PDO::MYSQL_ATTR_DIRECT_QUERY => 'PDO::MYSQL_ATTR_DIRECT_QUERY', + + PDO::MYSQL_ATTR_INIT_COMMAND => 'PDO::MYSQL_ATTR_INIT_COMMAND', + PDO::ATTR_EMULATE_PREPARES => 'PDO::ATTR_EMULATE_PREPARES', + ); + + $defaults = array( + PDO::ATTR_PERSISTENT => false, + PDO::ATTR_AUTOCOMMIT => 1, + /* TODO - why is this a valid option if getAttribute() does not support it?! */ + PDO::ATTR_TIMEOUT => false, + PDO::ATTR_EMULATE_PREPARES => 1, + PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => 1, + /* TODO getAttribute() does not handle it */ + PDO::MYSQL_ATTR_LOCAL_INFILE => false, + /* TODO getAttribute() does not handle it */ + PDO::MYSQL_ATTR_DIRECT_QUERY => 1, + PDO::MYSQL_ATTR_INIT_COMMAND => '', + ); + + try { + if (NULL !== ($db = @new PDO($dsn, $user, $pass, 'wrong type'))) + printf("[001] Expecting NULL got %s/%s\n", gettype($db), $db); + } catch (TypeError $e) { + } + + if (!is_object($db = new PDO($dsn, $user, $pass, array()))) + printf("[002] Expecting object got %s/%s¸\n", gettype($db), $db); $invalid = 999; - if (is_object($db = new PDO($dsn, $user, $pass, array($invalid => true)))) - printf("[003] [TODO][CHANGEREQUEST] Please, lets not ignore invalid options and bail out!\n"); - - $db = new PDO($dsn, $user, $pass); - foreach ($valid_options as $option => $name) { - /* TODO getAttribute() is pretty poor in supporting the options, suppress errors */ - $tmp = @$db->getAttribute($option); - if ($tmp !== $defaults[$option]) - printf("[003a] Expecting default value for '%s' of '%s'/%s, getAttribute() reports setting '%s'/%s\n", - $name, $defaults[$option], gettype($defaults[$option]), - $tmp, gettype($tmp)); - } - - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_AUTOCOMMIT => true)); - if (!is_object($db) || !$db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[004] Autocommit should be on\n"); - - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_AUTOCOMMIT => false)); - if (!is_object($db) || $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[005] Autocommit should be off\n"); - - /* TODO: no way to check ATTR_TIMEOUT settings */ - if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => 10)))) - printf("[006] ATTR_TIMEOUT should be accepted\n"); - - if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => PHP_INT_MAX)))) - printf("[007] ATTR_TIMEOUT should be accepted\n"); - - if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => -PHP_INT_MAX)))) - printf("[008] ATTR_TIMEOUT should be accepted\n"); - - /* TODO: Its ugly that PDO::ATTR_EMULATE_PREPARES == PDO::MYSQL_ATTR_DIRECT_QUERY */ - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => true)); - if (!is_object($db)) - printf("[009] ATTR_EMULATE_PREPARES should be accepted and on\n"); - if (!$db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) - printf("[010] [TODO][CHANGEREQUEST] ATTR_EMULATE_PREPARES should be on\n"); - if (!$db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[011] As PDO::MYSQL_ATTR_DIRECT_QUERY == PDO::ATTR_EMULATE_PREPARES - and PDO::ATTR_EMULATE_PREPARES overrules the other, PDO::MYSQL_ATTR_DIRECT_QUERY should be on\n"); - - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false)); - if (!is_object($db)) - printf("[012] ATTR_EMULATE_PREPARES should be accepted and on\n"); - if ($db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) - printf("[013] [TODO][CHANGEREQUEST] ATTR_EMULATE_PREPARES should be off\n"); - if ($db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[014] As PDO::MYSQL_ATTR_DIRECT_QUERY == PDO::ATTR_EMULATE_PREPARES - and PDO::ATTR_EMULATE_PREPARES overrules the other, PDO::MYSQL_ATTR_DIRECT_QUERY should be off\n"); - - // PDO::ATTR_EMULATE_PREPARES overrules PDO::MYSQL_ATTR_DIRECT_QUERY - // TODO: is it clever that a generic setting overrules a specific setting? - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_DIRECT_QUERY => false)); - if (!$db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) - printf("[015] PDO::ATTR_EMULATE_PREPARES should be on\n"); - if (!$db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[016] PDO::MYSQL_ATTR_DIRECT_QUERY should be on\n"); - - $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_DIRECT_QUERY => true)); - if ($db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) - printf("[017] PDO::ATTR_EMULATE_PREPARES should be off\n"); - if ($db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[018] PDO::MYSQL_ATTR_DIRECT_QUERY should be off\n"); - - set_option_and_check(19, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1, 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'); - set_option_and_check(20, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0, 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'); - - set_option_and_check(21, PDO::MYSQL_ATTR_LOCAL_INFILE, true, 'PDO::MYSQL_ATTR_LOCAL_INFILE'); - set_option_and_check(22, PDO::MYSQL_ATTR_LOCAL_INFILE, false, 'PDO::MYSQL_ATTR_LOCAL_INFILE'); - - set_option_and_check(23, PDO::MYSQL_ATTR_INIT_COMMAND, 'SET @a=1', 'PDO::MYSQL_ATTR_INIT_COMMAND'); - set_option_and_check(24, PDO::MYSQL_ATTR_INIT_COMMAND, '', 'PDO::MYSQL_ATTR_INIT_COMMAND'); - set_option_and_check(25, PDO::MYSQL_ATTR_INIT_COMMAND, 'INSERT INTO nonexistent(invalid) VALUES (1)', 'PDO::MYSQL_ATTR_INIT_COMMAND'); - - set_option_and_check(33, PDO::MYSQL_ATTR_DIRECT_QUERY, 1, 'PDO::MYSQL_ATTR_DIRECT_QUERY'); - set_option_and_check(34, PDO::MYSQL_ATTR_DIRECT_QUERY, 0, 'PDO::MYSQL_ATTR_DIRECT_QUERY'); - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } - - print "done!"; + if (is_object($db = new PDO($dsn, $user, $pass, array($invalid => true)))) + printf("[003] [TODO][CHANGEREQUEST] Please, lets not ignore invalid options and bail out!\n"); + + $db = new PDO($dsn, $user, $pass); + foreach ($valid_options as $option => $name) { + /* TODO getAttribute() is pretty poor in supporting the options, suppress errors */ + $tmp = @$db->getAttribute($option); + if ($tmp !== $defaults[$option]) + printf("[003a] Expecting default value for '%s' of '%s'/%s, getAttribute() reports setting '%s'/%s\n", + $name, $defaults[$option], gettype($defaults[$option]), + $tmp, gettype($tmp)); + } + + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_AUTOCOMMIT => true)); + if (!is_object($db) || !$db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[004] Autocommit should be on\n"); + + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_AUTOCOMMIT => false)); + if (!is_object($db) || $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[005] Autocommit should be off\n"); + + /* TODO: no way to check ATTR_TIMEOUT settings */ + if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => 10)))) + printf("[006] ATTR_TIMEOUT should be accepted\n"); + + if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => PHP_INT_MAX)))) + printf("[007] ATTR_TIMEOUT should be accepted\n"); + + if (!is_object($db = new PDO($dsn, $user, $pass, array(PDO::ATTR_TIMEOUT => -PHP_INT_MAX)))) + printf("[008] ATTR_TIMEOUT should be accepted\n"); + + /* TODO: Its ugly that PDO::ATTR_EMULATE_PREPARES == PDO::MYSQL_ATTR_DIRECT_QUERY */ + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => true)); + if (!is_object($db)) + printf("[009] ATTR_EMULATE_PREPARES should be accepted and on\n"); + if (!$db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) + printf("[010] [TODO][CHANGEREQUEST] ATTR_EMULATE_PREPARES should be on\n"); + if (!$db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[011] As PDO::MYSQL_ATTR_DIRECT_QUERY == PDO::ATTR_EMULATE_PREPARES + and PDO::ATTR_EMULATE_PREPARES overrules the other, PDO::MYSQL_ATTR_DIRECT_QUERY should be on\n"); + + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false)); + if (!is_object($db)) + printf("[012] ATTR_EMULATE_PREPARES should be accepted and on\n"); + if ($db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) + printf("[013] [TODO][CHANGEREQUEST] ATTR_EMULATE_PREPARES should be off\n"); + if ($db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[014] As PDO::MYSQL_ATTR_DIRECT_QUERY == PDO::ATTR_EMULATE_PREPARES + and PDO::ATTR_EMULATE_PREPARES overrules the other, PDO::MYSQL_ATTR_DIRECT_QUERY should be off\n"); + + // PDO::ATTR_EMULATE_PREPARES overrules PDO::MYSQL_ATTR_DIRECT_QUERY + // TODO: is it clever that a generic setting overrules a specific setting? + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => true, PDO::MYSQL_ATTR_DIRECT_QUERY => false)); + if (!$db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) + printf("[015] PDO::ATTR_EMULATE_PREPARES should be on\n"); + if (!$db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[016] PDO::MYSQL_ATTR_DIRECT_QUERY should be on\n"); + + $db = new PDO($dsn, $user, $pass, array(PDO::ATTR_EMULATE_PREPARES => false, PDO::MYSQL_ATTR_DIRECT_QUERY => true)); + if ($db->getAttribute(PDO::ATTR_EMULATE_PREPARES)) + printf("[017] PDO::ATTR_EMULATE_PREPARES should be off\n"); + if ($db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[018] PDO::MYSQL_ATTR_DIRECT_QUERY should be off\n"); + + set_option_and_check(19, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1, 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'); + set_option_and_check(20, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0, 'PDO::MYSQL_ATTR_USE_BUFFERED_QUERY'); + + set_option_and_check(21, PDO::MYSQL_ATTR_LOCAL_INFILE, true, 'PDO::MYSQL_ATTR_LOCAL_INFILE'); + set_option_and_check(22, PDO::MYSQL_ATTR_LOCAL_INFILE, false, 'PDO::MYSQL_ATTR_LOCAL_INFILE'); + + set_option_and_check(23, PDO::MYSQL_ATTR_INIT_COMMAND, 'SET @a=1', 'PDO::MYSQL_ATTR_INIT_COMMAND'); + set_option_and_check(24, PDO::MYSQL_ATTR_INIT_COMMAND, '', 'PDO::MYSQL_ATTR_INIT_COMMAND'); + set_option_and_check(25, PDO::MYSQL_ATTR_INIT_COMMAND, 'INSERT INTO nonexistent(invalid) VALUES (1)', 'PDO::MYSQL_ATTR_INIT_COMMAND'); + + set_option_and_check(33, PDO::MYSQL_ATTR_DIRECT_QUERY, 1, 'PDO::MYSQL_ATTR_DIRECT_QUERY'); + set_option_and_check(34, PDO::MYSQL_ATTR_DIRECT_QUERY, 0, 'PDO::MYSQL_ATTR_DIRECT_QUERY'); + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } + + print "done!"; ?> --EXPECTF-- [003] [TODO][CHANGEREQUEST] Please, lets not ignore invalid options and bail out! diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt index 3d7e1d4396..99754c9058 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct_options_libmysql.phpt @@ -10,72 +10,72 @@ if (MySQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - function set_option_and_check($offset, $option, $value, $option_desc, $ignore_diff = false) { + function set_option_and_check($offset, $option, $value, $option_desc, $ignore_diff = false) { - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; - try { - $db = new PDO($dsn, $user, $pass, array($option => $value)); - if (!is_object($db) || (!$ignore_diff && ($value !== ($tmp = @$db->getAttribute($option))))) - printf("[%03d] Expecting '%s'/%s got '%s'/%s' for options '%s'\n", - $offset, - $value, gettype($value), - $tmp, gettype($tmp), - $option_desc); - } catch (PDOException $e) { - printf("[%03d] %s\n", $offset, $e->getMessage()); - } + try { + $db = new PDO($dsn, $user, $pass, array($option => $value)); + if (!is_object($db) || (!$ignore_diff && ($value !== ($tmp = @$db->getAttribute($option))))) + printf("[%03d] Expecting '%s'/%s got '%s'/%s' for options '%s'\n", + $offset, + $value, gettype($value), + $tmp, gettype($tmp), + $option_desc); + } catch (PDOException $e) { + printf("[%03d] %s\n", $offset, $e->getMessage()); + } - } + } - try { + try { - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; - $valid_options = array(); - $valid_options[PDO::MYSQL_ATTR_MAX_BUFFER_SIZE] = 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'; - $valid_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'PDO::MYSQL_ATTR_INIT_COMMAND'; - $valid_options[PDO::MYSQL_ATTR_READ_DEFAULT_FILE] = 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'; - $valid_options[PDO::MYSQL_ATTR_READ_DEFAULT_GROUP] = 'PDO::MYSQL_ATTR_READ_DEFAULT_GROUP'; + $valid_options = array(); + $valid_options[PDO::MYSQL_ATTR_MAX_BUFFER_SIZE] = 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'; + $valid_options[PDO::MYSQL_ATTR_INIT_COMMAND] = 'PDO::MYSQL_ATTR_INIT_COMMAND'; + $valid_options[PDO::MYSQL_ATTR_READ_DEFAULT_FILE] = 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'; + $valid_options[PDO::MYSQL_ATTR_READ_DEFAULT_GROUP] = 'PDO::MYSQL_ATTR_READ_DEFAULT_GROUP'; - $defaults[PDO::MYSQL_ATTR_MAX_BUFFER_SIZE] = 1048576; - /* TODO getAttribute() does not handle it */ - $defaults[PDO::MYSQL_ATTR_INIT_COMMAND] = ''; - $defaults[PDO::MYSQL_ATTR_READ_DEFAULT_FILE] = false; - $defaults[PDO::MYSQL_ATTR_READ_DEFAULT_GROUP] = false; + $defaults[PDO::MYSQL_ATTR_MAX_BUFFER_SIZE] = 1048576; + /* TODO getAttribute() does not handle it */ + $defaults[PDO::MYSQL_ATTR_INIT_COMMAND] = ''; + $defaults[PDO::MYSQL_ATTR_READ_DEFAULT_FILE] = false; + $defaults[PDO::MYSQL_ATTR_READ_DEFAULT_GROUP] = false; - $db = new PDO($dsn, $user, $pass); - foreach ($valid_options as $option => $name) { - /* TODO getAttribute() is pretty poor in supporting the options, suppress errors */ - $tmp = @$db->getAttribute($option); - if ($tmp !== $defaults[$option]) - printf("[001] Expecting default value for '%s' of '%s'/%s, getAttribute() reports setting '%s'/%s\n", - $name, $defaults[$option], gettype($defaults[$option]), - $tmp, gettype($tmp)); - } + $db = new PDO($dsn, $user, $pass); + foreach ($valid_options as $option => $name) { + /* TODO getAttribute() is pretty poor in supporting the options, suppress errors */ + $tmp = @$db->getAttribute($option); + if ($tmp !== $defaults[$option]) + printf("[001] Expecting default value for '%s' of '%s'/%s, getAttribute() reports setting '%s'/%s\n", + $name, $defaults[$option], gettype($defaults[$option]), + $tmp, gettype($tmp)); + } - set_option_and_check(26, PDO::MYSQL_ATTR_READ_DEFAULT_FILE, true, 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'); - set_option_and_check(27, PDO::MYSQL_ATTR_READ_DEFAULT_FILE, false, 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'); + set_option_and_check(26, PDO::MYSQL_ATTR_READ_DEFAULT_FILE, true, 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'); + set_option_and_check(27, PDO::MYSQL_ATTR_READ_DEFAULT_FILE, false, 'PDO::MYSQL_ATTR_READ_DEFAULT_FILE'); - set_option_and_check(30, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, -1, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE', true); - set_option_and_check(31, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, PHP_INT_MAX, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'); - set_option_and_check(32, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, 1, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'); + set_option_and_check(30, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, -1, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE', true); + set_option_and_check(31, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, PHP_INT_MAX, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'); + set_option_and_check(32, PDO::MYSQL_ATTR_MAX_BUFFER_SIZE, 1, 'PDO::MYSQL_ATTR_MAX_BUFFER_SIZE'); - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } - print "done!"; + print "done!"; ?> --EXPECT-- [001] Expecting default value for 'PDO::MYSQL_ATTR_INIT_COMMAND' of ''/string, getAttribute() reports setting ''/boolean diff --git a/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt b/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt index 7418033768..8d51961c9d 100644 --- a/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql___construct_uri.phpt @@ -8,68 +8,68 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - try { + try { - if ($tmp = MySQLPDOTest::getTempDir()) { + if ($tmp = MySQLPDOTest::getTempDir()) { - $file = $tmp . DIRECTORY_SEPARATOR . 'pdomuri.tst'; - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - $uri = sprintf('uri:file://%s', (substr(PHP_OS, 0, 3) == 'WIN' ? str_replace('\\', '/', $file) : $file)); + $file = $tmp . DIRECTORY_SEPARATOR . 'pdomuri.tst'; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + $uri = sprintf('uri:file://%s', (substr(PHP_OS, 0, 3) == 'WIN' ? str_replace('\\', '/', $file) : $file)); - if ($fp = @fopen($file, 'w')) { - // ok, great we can create a file with a DSN in it - fwrite($fp, $dsn); - fclose($fp); - clearstatcache(); - assert(file_exists($file)); - try { - $db = new PDO($uri, $user, $pass); - } catch (PDOException $e) { - printf("[002] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), %s\n", - $uri, $dsn, - $file, filesize($file), file_get_contents($file), - $e->getMessage()); - } - unlink($file); - } + if ($fp = @fopen($file, 'w')) { + // ok, great we can create a file with a DSN in it + fwrite($fp, $dsn); + fclose($fp); + clearstatcache(); + assert(file_exists($file)); + try { + $db = new PDO($uri, $user, $pass); + } catch (PDOException $e) { + printf("[002] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), %s\n", + $uri, $dsn, + $file, filesize($file), file_get_contents($file), + $e->getMessage()); + } + unlink($file); + } - if ($fp = @fopen($file, 'w')) { - fwrite($fp, sprintf('mysql:dbname=letshopeinvalid;%s%s', - chr(0), $dsn)); - fclose($fp); - clearstatcache(); - assert(file_exists($file)); - try { - $db = new PDO($uri, $user, $pass); - } catch (PDOException $e) { - $expected = array( - "SQLSTATE[HY000] [1049] Unknown database 'letshopeinvalid'", - "SQLSTATE[HY000] [2002] No such file or directory" - ); - printf("[003] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), chr(0) test, %s\n", - $uri, $dsn, - $file, filesize($file), file_get_contents($file), - (in_array($e->getMessage(), $expected) ? 'EXPECTED ERROR' : $e->getMessage())); - } - unlink($file); - } + if ($fp = @fopen($file, 'w')) { + fwrite($fp, sprintf('mysql:dbname=letshopeinvalid;%s%s', + chr(0), $dsn)); + fclose($fp); + clearstatcache(); + assert(file_exists($file)); + try { + $db = new PDO($uri, $user, $pass); + } catch (PDOException $e) { + $expected = array( + "SQLSTATE[HY000] [1049] Unknown database 'letshopeinvalid'", + "SQLSTATE[HY000] [2002] No such file or directory" + ); + printf("[003] URI=%s, DSN=%s, File=%s (%d bytes, '%s'), chr(0) test, %s\n", + $uri, $dsn, + $file, filesize($file), file_get_contents($file), + (in_array($e->getMessage(), $expected) ? 'EXPECTED ERROR' : $e->getMessage())); + } + unlink($file); + } - } + } - /* TODO: safe mode */ + /* TODO: safe mode */ - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } - print "done!"; + print "done!"; ?> --EXPECTF-- [003] URI=uri:file://%spdomuri.tst, DSN=mysql%sdbname=%s, File=%spdomuri.tst (%d bytes, 'mysql%sdbname=letshopeinvalid%s'), chr(0) test, EXPECTED ERROR diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_autocommit.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_autocommit.phpt index 361750260b..0dd8663d08 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_autocommit.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_autocommit.phpt @@ -9,85 +9,85 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - // autocommit should be on by default - if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) - printf("[001] Expecting int/1 got %s\n", var_export($tmp, true)); + // autocommit should be on by default + if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) + printf("[001] Expecting int/1 got %s\n", var_export($tmp, true)); - // lets see if the server agrees to that - $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); - if (!$row['_autocommit']) - printf("[002] Server autocommit mode should be on, got '%s'\n", var_export($row['_autocommit'])); + // lets see if the server agrees to that + $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); + if (!$row['_autocommit']) + printf("[002] Server autocommit mode should be on, got '%s'\n", var_export($row['_autocommit'])); - // on -> off - if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)) - printf("[003] Cannot turn off autocommit\n"); + // on -> off + if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)) + printf("[003] Cannot turn off autocommit\n"); - $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); - if ($row['_autocommit']) - printf("[004] Server autocommit mode should be off, got '%s'\n", var_export($row['_autocommit'])); + $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); + if ($row['_autocommit']) + printf("[004] Server autocommit mode should be off, got '%s'\n", var_export($row['_autocommit'])); - // PDO thinks autocommit is off, but its manually turned on... - if (!$db->query('SET autocommit = 1')) - printf("[005] Cannot turn on server autocommit mode, %s\n", var_export($db->errorInfo(), true)); + // PDO thinks autocommit is off, but its manually turned on... + if (!$db->query('SET autocommit = 1')) + printf("[005] Cannot turn on server autocommit mode, %s\n", var_export($db->errorInfo(), true)); - if (0 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) - printf("[006] Expecting int/0 got %s\n", var_export($tmp, true)); + if (0 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) + printf("[006] Expecting int/0 got %s\n", var_export($tmp, true)); - // off -> on - if (!$db->query('SET autocommit = 0')) - printf("[007] Cannot turn off server autocommit mode, %s\n", var_export($db->errorInfo(), true)); + // off -> on + if (!$db->query('SET autocommit = 0')) + printf("[007] Cannot turn off server autocommit mode, %s\n", var_export($db->errorInfo(), true)); - if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)) - printf("[008] Cannot turn on autocommit\n"); + if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1)) + printf("[008] Cannot turn on autocommit\n"); - $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); - if (!$row['_autocommit']) - printf("[009] Server autocommit mode should be on, got '%s'\n", var_export($row['_autocommit'])); + $row = $db->query('SELECT @@autocommit AS _autocommit')->fetch(PDO::FETCH_ASSOC); + if (!$row['_autocommit']) + printf("[009] Server autocommit mode should be on, got '%s'\n", var_export($row['_autocommit'])); - if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) - printf("[010] Expecting int/1 got %s\n", var_export($tmp, true)); + if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) + printf("[010] Expecting int/1 got %s\n", var_export($tmp, true)); - if (MySQLPDOTest::detect_transactional_mysql_engine($db)) { - // nice, we have a transactional engine to play with + if (MySQLPDOTest::detect_transactional_mysql_engine($db)) { + // nice, we have a transactional engine to play with - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - $num = $row['_num']; + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + $num = $row['_num']; - $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); - $num++; - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[011] Insert has failed, test will fail\n"); + $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); + $num++; + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[011] Insert has failed, test will fail\n"); - // autocommit is on, no rollback possible - $db->query('ROLLBACK'); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[012] ROLLBACK should not have undone anything\n"); + // autocommit is on, no rollback possible + $db->query('ROLLBACK'); + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[012] ROLLBACK should not have undone anything\n"); - if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)) - printf("[013] Cannot turn off autocommit\n"); + if (!$db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0)) + printf("[013] Cannot turn off autocommit\n"); - $db->query('DELETE FROM test WHERE id = 100'); - $db->query('ROLLBACK'); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[014] ROLLBACK should have undone the DELETE\n"); + $db->query('DELETE FROM test WHERE id = 100'); + $db->query('ROLLBACK'); + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[014] ROLLBACK should have undone the DELETE\n"); - $db->query('DELETE FROM test WHERE id = 100'); - $db->query('COMMIT'); - $num--; - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[015] DELETE should have been committed\n"); + $db->query('DELETE FROM test WHERE id = 100'); + $db->query('COMMIT'); + $num--; + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[015] DELETE should have been committed\n"); - } + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_case.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_case.phpt index a011c864c5..2b45154248 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_case.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_case.phpt @@ -9,80 +9,80 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - $default = $db->getAttribute(PDO::ATTR_CASE); - $known = array( - PDO::CASE_LOWER => 'PDO::CASE_LOWER', - PDO::CASE_UPPER => 'PDO::CASE_UPPER', - PDO::CASE_NATURAL => 'PDO::CASE_NATURAL' - ); - if (!isset($known[$default])) - printf("[001] getAttribute(PDO::ATTR_CASE) returns unknown value '%s'\n", - var_export($default, true)); - else - var_dump($known[$default]); + $default = $db->getAttribute(PDO::ATTR_CASE); + $known = array( + PDO::CASE_LOWER => 'PDO::CASE_LOWER', + PDO::CASE_UPPER => 'PDO::CASE_UPPER', + PDO::CASE_NATURAL => 'PDO::CASE_NATURAL' + ); + if (!isset($known[$default])) + printf("[001] getAttribute(PDO::ATTR_CASE) returns unknown value '%s'\n", + var_export($default, true)); + else + var_dump($known[$default]); - // lets see what the default is... - if (!is_object($stmt = $db->query("SELECT id, id AS 'ID_UPPER', label FROM test ORDER BY id ASC LIMIT 2"))) - printf("[002] %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + // lets see what the default is... + if (!is_object($stmt = $db->query("SELECT id, id AS 'ID_UPPER', label FROM test ORDER BY id ASC LIMIT 2"))) + printf("[002] %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); + var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); - if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER)) - printf("[003] Cannot set PDO::ATTR_CASE = PDO::CASE_LOWER, %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_LOWER)) + printf("[003] Cannot set PDO::ATTR_CASE = PDO::CASE_LOWER, %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_LOWER) - printf("[004] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", - var_export($tmp, true)); + if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_LOWER) + printf("[004] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", + var_export($tmp, true)); - if (true === $db->exec('ALTER TABLE test ADD MiXeD CHAR(1)')) - printf("[005] Cannot add column %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (true === $db->exec('ALTER TABLE test ADD MiXeD CHAR(1)')) + printf("[005] Cannot add column %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - if (false === $db->exec('ALTER TABLE test ADD MYUPPER CHAR(1)')) - printf("[006] Cannot add column %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (false === $db->exec('ALTER TABLE test ADD MYUPPER CHAR(1)')) + printf("[006] Cannot add column %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - if (!is_object($stmt = $db->query("SELECT id, id AS 'ID_UPPER', label, MiXeD, MYUPPER FROM test ORDER BY id ASC LIMIT 2"))) - printf("[007] %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (!is_object($stmt = $db->query("SELECT id, id AS 'ID_UPPER', label, MiXeD, MYUPPER FROM test ORDER BY id ASC LIMIT 2"))) + printf("[007] %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); + var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); - if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER)) - printf("[008] Cannot set PDO::ATTR_CASE = PDO::CASE_UPPER %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_UPPER)) + printf("[008] Cannot set PDO::ATTR_CASE = PDO::CASE_UPPER %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_UPPER) - printf("[009] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", - var_export($tmp, true)); + if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_UPPER) + printf("[009] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", + var_export($tmp, true)); - if (!is_object($stmt = $db->query("SELECT id, label, MiXeD, MYUPPER, MYUPPER AS 'lower' FROM test ORDER BY id ASC LIMIT 1"))) - printf("[010] %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (!is_object($stmt = $db->query("SELECT id, label, MiXeD, MYUPPER, MYUPPER AS 'lower' FROM test ORDER BY id ASC LIMIT 1"))) + printf("[010] %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); + var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); - if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL)) - printf("[011] Cannot set PDO::ATTR_CASE = PDO::CASE_NATURAL %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (true !== $db->setAttribute(PDO::ATTR_CASE, PDO::CASE_NATURAL)) + printf("[011] Cannot set PDO::ATTR_CASE = PDO::CASE_NATURAL %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_NATURAL) - printf("[012] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", - var_export($tmp, true)); + if (($tmp = $db->getAttribute(PDO::ATTR_CASE)) !== PDO::CASE_NATURAL) + printf("[012] getAttribute(PDO::ATTR_CASE) returns wrong value '%s'\n", + var_export($tmp, true)); - if (!is_object($stmt = $db->query("SELECT id, label, MiXeD, MYUPPER, id AS 'ID' FROM test ORDER BY id ASC LIMIT 1"))) - printf("[013] %s - %s\n", - var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); + if (!is_object($stmt = $db->query("SELECT id, label, MiXeD, MYUPPER, id AS 'ID' FROM test ORDER BY id ASC LIMIT 1"))) + printf("[013] %s - %s\n", + var_export($db->errorInfo(), true), var_export($db->errorCode(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); + var_dump($stmt->fetchAll(PDO::FETCH_BOTH)); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_client_version.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_client_version.phpt index ce50df80eb..604ec90c41 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_client_version.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_client_version.phpt @@ -9,29 +9,29 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); + assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); - $version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION); + $version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION); - // No more constraints - mysqlnd and libmysql return different strings at least - // with mysqli. Return type check is already performed in the generic test. - // According to the manual we should get an int but as of today we do get a string... - if ('' == $version) - printf("[001] Client version must not be empty\n"); + // No more constraints - mysqlnd and libmysql return different strings at least + // with mysqli. Return type check is already performed in the generic test. + // According to the manual we should get an int but as of today we do get a string... + if ('' == $version) + printf("[001] Client version must not be empty\n"); - // Read-only - if (false !== $db->setAttribute(PDO::ATTR_CLIENT_VERSION, '1.0')) - printf("[002] Wonderful, I can change the client version!\n"); + // Read-only + if (false !== $db->setAttribute(PDO::ATTR_CLIENT_VERSION, '1.0')) + printf("[002] Wonderful, I can change the client version!\n"); - $new_version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION); - if ($new_version !== $version) - printf("[003] Did we change it from '%s' to '%s'?\n", $version, $new_version); + $new_version = $db->getAttribute(PDO::ATTR_CLIENT_VERSION); + if ($new_version !== $version) + printf("[003] Did we change it from '%s' to '%s'?\n", $version, $new_version); - print "done!"; + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_connection_status.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_connection_status.phpt index 8abb16a1c7..07a1de5b65 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_connection_status.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_connection_status.phpt @@ -9,24 +9,24 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $status = $db->getAttribute(PDO::ATTR_CONNECTION_STATUS); + $status = $db->getAttribute(PDO::ATTR_CONNECTION_STATUS); if (!is_string($status)) printf("[002] Expecting string, got '%s'\n", var_export($status, true)); - if ('' == $status) - printf("[003] Connection status string must not be empty\n"); + if ('' == $status) + printf("[003] Connection status string must not be empty\n"); - if (false !== $db->setAttribute(PDO::ATTR_CONNECTION_STATUS, 'my own connection status')) - printf("[004] Changing read only attribute\n"); + if (false !== $db->setAttribute(PDO::ATTR_CONNECTION_STATUS, 'my own connection status')) + printf("[004] Changing read only attribute\n"); - $status2 = $db->getAttribute(PDO::ATTR_CONNECTION_STATUS); - if ($status !== $status2) - printf("[005] Connection status should not have changed\n"); + $status2 = $db->getAttribute(PDO::ATTR_CONNECTION_STATUS); + if ($status !== $status2) + printf("[005] Connection status should not have changed\n"); - print "done!"; + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_driver_name.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_driver_name.phpt index 65ab531ffd..e105a0eac1 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_driver_name.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_driver_name.phpt @@ -9,22 +9,22 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); + assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); - $name = $db->getAttribute(PDO::ATTR_DRIVER_NAME); - var_dump($name); + $name = $db->getAttribute(PDO::ATTR_DRIVER_NAME); + var_dump($name); - if (false !== $db->setAttribute(PDO::ATTR_DRIVER_NAME, 'mydriver')) - printf("[001] Wonderful, I can create new PDO drivers!\n"); + if (false !== $db->setAttribute(PDO::ATTR_DRIVER_NAME, 'mydriver')) + printf("[001] Wonderful, I can create new PDO drivers!\n"); - $new_name = $db->getAttribute(PDO::ATTR_DRIVER_NAME); - if ($name != $new_name) - printf("[002] Did we change it from '%s' to '%s'?\n", $name, $new_name); + $new_name = $db->getAttribute(PDO::ATTR_DRIVER_NAME); + if ($name != $new_name) + printf("[002] Did we change it from '%s' to '%s'?\n", $name, $new_name); - print "done!"; + print "done!"; ?> --EXPECT-- string(5) "mysql" diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt index f0dc29b8d4..13c331633c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_errmode.phpt @@ -11,153 +11,153 @@ $db = MySQLPDOTest::factory(); error_reporting=E_ALL --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - $valid = array(PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION); - do { - $invalid = mt_rand(-1000, 1000); - } while (in_array($invalid, $valid)); - - - $tmp = array(); - if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp)) - printf("[001] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...\n"); - - $tmp = new stdClass(); - $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp); - if (false != $ret) - printf("[002] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n", - var_export($ret, true)); - - $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, 'pdo'); - if (false != $ret) - printf("[003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n", - var_export($ret, true)); - - if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $invalid)) - printf("[004] Invalid ERRMODE should be rejected\n"); - - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); - // no message for any PDO call but... - $db->query('THIS IS NOT VALID SQL'); - // ... still messages for everything else - $code = $db->errorCode(); - $info = $db->errorInfo(); - - if ($code != '42000') - printf("[005] Expecting SQL code 42000 got '%s'\n", $code); - if ($code !== $info[0]) - printf("[006] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", - $code, $info[0]); - if ('' == $info[1]) - printf("[007] Driver specific error code not set\n"); - if ('' == $info[2]) - printf("[008] Driver specific error message not set\n"); - - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); - $db->query('THIS IS NOT VALID SQL'); - - $code = $db->errorCode(); - $info = $db->errorInfo(); - - if ($code != '42000') - printf("[009] Expecting SQL code 42000 got '%s'\n", $code); - if ($code !== $info[0]) - printf("[010] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", - $code, $info[0]); - if ('' == $info[1]) - printf("[011] Driver specific error code not set\n"); - if ('' == $info[2]) - printf("[012] Driver specific error message not set\n"); - - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - try { - $line = __LINE__ + 1; - $db->query('THIS IS NOT VALID SQL'); - } catch (PDOException $e) { - - $code = $db->errorCode(); - $info = $db->errorInfo(); - - if ($code != '42000') - printf("[013] Expecting SQL code 42000 got '%s'\n", $code); - if ($code !== $info[0]) - printf("[014] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", - $code, $info[0]); - if ('' == $info[1]) - printf("[015] Driver specific error code not set\n"); - if ('' == $info[2]) - printf("[016] Driver specific error message not set\n"); - - if ($e->getCode() !== $code) - printf("[017] Exception code '%s' differs from errorCode '%s'\n", - $e->getCode(), $code); - - $msg = $e->getMessage(); - foreach ($info as $k => $v) { - if (false === stristr($msg, (string)$v)) { - printf("[018] Cannot find all parts of the error info ('%s') in the exception message '%s'\n", - $v, $msg); - } - } - - if ($e->getLine() !== $line) - printf("[019] Exception has been thrown in line %d, exception object reports line %d\n", - $line, $e->getLine()); - - if ($e->getFile() !== __FILE__) - printf("[020] Exception has been thrown in file '%s', exception object reports file '%s'\n", - __FILE__, $e->getFile()); - - } - - function my_handler($e) { - global $db, $line; - - $code = $db->errorCode(); - $info = $db->errorInfo(); - - if ($code != '42000') - printf("[021] Expecting SQL code 42000 got '%s'\n", $code); - if ($code !== $info[0]) - printf("[022] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", - $code, $info[0]); - if ('' == $info[1]) - printf("[023] Driver specific error code not set\n"); - if ('' == $info[2]) - printf("[024] Driver specific error message not set\n"); - - if ($e->getCode() !== $code) - printf("[025] Exception code '%s' differs from errorCode '%s'\n", - $e->getCode(), $code); - - $msg = $e->getMessage(); - foreach ($info as $k => $v) { - if (false === stristr($msg, (string)$v)) { - printf("[026] Cannot find all parts of the error info ('%s') in the exception message '%s'\n", - $v, $msg); - } - } - - if ($e->getLine() !== $line) - printf("[027] Exception has been thrown in line %d, exception object reports line %d\n", - $line, $e->getLine()); - - if ($e->getFile() !== __FILE__) - printf("[028] Exception has been thrown in file '%s', exception object reports file '%s'\n", - __FILE__, $e->getFile()); - - if (get_class($e) != 'PDOException') - printf("[029] Expecting PDO exception got exception of type '%s'\n", get_class($e)); - - print "\nend of execution"; - } - set_exception_handler('my_handler'); - $line = __LINE__ + 1; - $db->query('THIS IS NOT VALID SQL'); - - print "done!\n"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + $valid = array(PDO::ERRMODE_SILENT, PDO::ERRMODE_WARNING, PDO::ERRMODE_EXCEPTION); + do { + $invalid = mt_rand(-1000, 1000); + } while (in_array($invalid, $valid)); + + + $tmp = array(); + if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp)) + printf("[001] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...\n"); + + $tmp = new stdClass(); + $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, $tmp); + if (false != $ret) + printf("[002] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n", + var_export($ret, true)); + + $ret = @$db->setAttribute(PDO::ATTR_ERRMODE, 'pdo'); + if (false != $ret) + printf("[003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...%s\n", + var_export($ret, true)); + + if (false != @$db->setAttribute(PDO::ATTR_ERRMODE, $invalid)) + printf("[004] Invalid ERRMODE should be rejected\n"); + + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT); + // no message for any PDO call but... + $db->query('THIS IS NOT VALID SQL'); + // ... still messages for everything else + $code = $db->errorCode(); + $info = $db->errorInfo(); + + if ($code != '42000') + printf("[005] Expecting SQL code 42000 got '%s'\n", $code); + if ($code !== $info[0]) + printf("[006] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", + $code, $info[0]); + if ('' == $info[1]) + printf("[007] Driver specific error code not set\n"); + if ('' == $info[2]) + printf("[008] Driver specific error message not set\n"); + + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + $db->query('THIS IS NOT VALID SQL'); + + $code = $db->errorCode(); + $info = $db->errorInfo(); + + if ($code != '42000') + printf("[009] Expecting SQL code 42000 got '%s'\n", $code); + if ($code !== $info[0]) + printf("[010] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", + $code, $info[0]); + if ('' == $info[1]) + printf("[011] Driver specific error code not set\n"); + if ('' == $info[2]) + printf("[012] Driver specific error message not set\n"); + + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + try { + $line = __LINE__ + 1; + $db->query('THIS IS NOT VALID SQL'); + } catch (PDOException $e) { + + $code = $db->errorCode(); + $info = $db->errorInfo(); + + if ($code != '42000') + printf("[013] Expecting SQL code 42000 got '%s'\n", $code); + if ($code !== $info[0]) + printf("[014] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", + $code, $info[0]); + if ('' == $info[1]) + printf("[015] Driver specific error code not set\n"); + if ('' == $info[2]) + printf("[016] Driver specific error message not set\n"); + + if ($e->getCode() !== $code) + printf("[017] Exception code '%s' differs from errorCode '%s'\n", + $e->getCode(), $code); + + $msg = $e->getMessage(); + foreach ($info as $k => $v) { + if (false === stristr($msg, (string)$v)) { + printf("[018] Cannot find all parts of the error info ('%s') in the exception message '%s'\n", + $v, $msg); + } + } + + if ($e->getLine() !== $line) + printf("[019] Exception has been thrown in line %d, exception object reports line %d\n", + $line, $e->getLine()); + + if ($e->getFile() !== __FILE__) + printf("[020] Exception has been thrown in file '%s', exception object reports file '%s'\n", + __FILE__, $e->getFile()); + + } + + function my_handler($e) { + global $db, $line; + + $code = $db->errorCode(); + $info = $db->errorInfo(); + + if ($code != '42000') + printf("[021] Expecting SQL code 42000 got '%s'\n", $code); + if ($code !== $info[0]) + printf("[022] Code and info should be identical, got errorCode() = %s, errorInfo()[0] = %s\n", + $code, $info[0]); + if ('' == $info[1]) + printf("[023] Driver specific error code not set\n"); + if ('' == $info[2]) + printf("[024] Driver specific error message not set\n"); + + if ($e->getCode() !== $code) + printf("[025] Exception code '%s' differs from errorCode '%s'\n", + $e->getCode(), $code); + + $msg = $e->getMessage(); + foreach ($info as $k => $v) { + if (false === stristr($msg, (string)$v)) { + printf("[026] Cannot find all parts of the error info ('%s') in the exception message '%s'\n", + $v, $msg); + } + } + + if ($e->getLine() !== $line) + printf("[027] Exception has been thrown in line %d, exception object reports line %d\n", + $line, $e->getLine()); + + if ($e->getFile() !== __FILE__) + printf("[028] Exception has been thrown in file '%s', exception object reports file '%s'\n", + __FILE__, $e->getFile()); + + if (get_class($e) != 'PDOException') + printf("[029] Expecting PDO exception got exception of type '%s'\n", get_class($e)); + + print "\nend of execution"; + } + set_exception_handler('my_handler'); + $line = __LINE__ + 1; + $db->query('THIS IS NOT VALID SQL'); + + print "done!\n"; --EXPECTF-- [003] Maybe PDO could indicate that this is not a proper way of setting the ERRMODE...true diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_fetch_table_names.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_fetch_table_names.phpt index a19e680de1..eabc4db829 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_fetch_table_names.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_fetch_table_names.phpt @@ -8,21 +8,21 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, 1); - $stmt = $db->query('SELECT label FROM test LIMIT 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt->closeCursor(); + $db->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, 1); + $stmt = $db->query('SELECT label FROM test LIMIT 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt->closeCursor(); - $db->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, 0); - $stmt = $db->query('SELECT label FROM test LIMIT 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt->closeCursor(); + $db->setAttribute(PDO::ATTR_FETCH_TABLE_NAMES, 0); + $stmt = $db->query('SELECT label FROM test LIMIT 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt->closeCursor(); - print "done!"; + print "done!"; ?> --EXPECT-- array(1) { diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_init_command.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_init_command.phpt index cd3b40d6d1..c979075fd7 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_init_command.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_init_command.phpt @@ -11,29 +11,29 @@ $db = MySQLPDOTest::factory(); error_reporting=E_ALL --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; - $table = sprintf("test_%s", md5(mt_rand(0, PHP_INT_MAX))); - $db = new PDO($dsn, $user, $pass); - $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); + $table = sprintf("test_%s", md5(mt_rand(0, PHP_INT_MAX))); + $db = new PDO($dsn, $user, $pass); + $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); - $create = sprintf('CREATE TABLE %s(id INT)', $table); - var_dump($create); - $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => $create)); + $create = sprintf('CREATE TABLE %s(id INT)', $table); + var_dump($create); + $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => $create)); - $info = $db->errorInfo(); - var_dump($info[0]); + $info = $db->errorInfo(); + var_dump($info[0]); - $db->exec(sprintf('INSERT INTO %s(id) VALUES (1)', $table)); - $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $db->exec(sprintf('INSERT INTO %s(id) VALUES (1)', $table)); + $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); - print "done!"; + $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); + print "done!"; ?> --EXPECTF-- string(58) "CREATE TABLE test_%s(id INT)" diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_max_buffer_size.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_max_buffer_size.phpt index c988b2b3cb..1337c1ac95 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_max_buffer_size.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_max_buffer_size.phpt @@ -10,58 +10,58 @@ if (MySQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - function try_buffer_size($offset, $buffer_size) { + function try_buffer_size($offset, $buffer_size) { - try { + try { - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; - /* unsigned overflow possible ? */ - $db = new PDO($dsn, $user, $pass, - array( - PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => $buffer_size, - /* buffer is only relevant with native PS */ - PDO::MYSQL_ATTR_DIRECT_QUERY => 0, - PDO::ATTR_EMULATE_PREPARES => 0, - )); + /* unsigned overflow possible ? */ + $db = new PDO($dsn, $user, $pass, + array( + PDO::MYSQL_ATTR_MAX_BUFFER_SIZE => $buffer_size, + /* buffer is only relevant with native PS */ + PDO::MYSQL_ATTR_DIRECT_QUERY => 0, + PDO::ATTR_EMULATE_PREPARES => 0, + )); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, val LONGBLOB) ENGINE = %s', PDO_MYSQL_TEST_ENGINE)); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, val LONGBLOB) ENGINE = %s', PDO_MYSQL_TEST_ENGINE)); - // 10 * (10 * 1024) = 10 * (10 * 1k) = 100k - $db->exec('INSERT INTO test(id, val) VALUES (1, REPEAT("01234567890", 10240))'); + // 10 * (10 * 1024) = 10 * (10 * 1k) = 100k + $db->exec('INSERT INTO test(id, val) VALUES (1, REPEAT("01234567890", 10240))'); - $stmt = $db->prepare('SELECT id, val FROM test'); - $stmt->execute(); + $stmt = $db->prepare('SELECT id, val FROM test'); + $stmt->execute(); - $id = $val = NULL; - $stmt->bindColumn(1, $id); - $stmt->bindColumn(2, $val); - while ($row = $stmt->fetch(PDO::FETCH_BOUND)) { - printf("[%03d] id = %d, val = %s... (length: %d)\n", - $offset, $id, substr($val, 0, 10), strlen($val)); - } - $db->exec('DROP TABLE IF EXISTS test'); + $id = $val = NULL; + $stmt->bindColumn(1, $id); + $stmt->bindColumn(2, $val); + while ($row = $stmt->fetch(PDO::FETCH_BOUND)) { + printf("[%03d] id = %d, val = %s... (length: %d)\n", + $offset, $id, substr($val, 0, 10), strlen($val)); + } + $db->exec('DROP TABLE IF EXISTS test'); - } catch (PDOException $e) { - printf("[%03d] %s, [%s] %s\n", - $offset, - $e->getMessage(), - (is_object($db)) ? $db->errorCode() : 'n/a', - (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); - } - } + } catch (PDOException $e) { + printf("[%03d] %s, [%s] %s\n", + $offset, + $e->getMessage(), + (is_object($db)) ? $db->errorCode() : 'n/a', + (is_object($db)) ? implode(' ', $db->errorInfo()) : 'n/a'); + } + } - try_buffer_size(1, -1); - try_buffer_size(2, 1000); - try_buffer_size(3, NULL); - try_buffer_size(4, 2000); + try_buffer_size(1, -1); + try_buffer_size(2, 1000); + try_buffer_size(3, NULL); + try_buffer_size(4, 2000); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt index 92bab1d30d..65b5e1bdc9 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_multi_statements.phpt @@ -11,43 +11,43 @@ $db = MySQLPDOTest::factory(); error_reporting=E_ALL --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; - $table = sprintf("test_%s", md5(mt_rand(0, PHP_INT_MAX))); - $db = new PDO($dsn, $user, $pass); - $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); - $create = sprintf('CREATE TABLE %s(id INT)', $table); - $db->exec($create); - $db->exec(sprintf('INSERT INTO %s(id) VALUES (1)', $table)); - $stmt = $db->query(sprintf('SELECT * FROM %s; INSERT INTO %s(id) VALUES (2)', $table, $table)); - $stmt->closeCursor(); - $info = $db->errorInfo(); - var_dump($info[0]); - $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $table = sprintf("test_%s", md5(mt_rand(0, PHP_INT_MAX))); + $db = new PDO($dsn, $user, $pass); + $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); + $create = sprintf('CREATE TABLE %s(id INT)', $table); + $db->exec($create); + $db->exec(sprintf('INSERT INTO %s(id) VALUES (1)', $table)); + $stmt = $db->query(sprintf('SELECT * FROM %s; INSERT INTO %s(id) VALUES (2)', $table, $table)); + $stmt->closeCursor(); + $info = $db->errorInfo(); + var_dump($info[0]); + $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); // A single query with a trailing delimiter. - $stmt = $db->query('SELECT 1 AS value;'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('SELECT 1 AS value;'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // New connection, does not allow multiple statements. - $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => false)); - $stmt = $db->query(sprintf('SELECT * FROM %s; INSERT INTO %s(id) VALUES (3)', $table, $table)); - var_dump($stmt); - $info = $db->errorInfo(); - var_dump($info[0]); + // New connection, does not allow multiple statements. + $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => false)); + $stmt = $db->query(sprintf('SELECT * FROM %s; INSERT INTO %s(id) VALUES (3)', $table, $table)); + var_dump($stmt); + $info = $db->errorInfo(); + var_dump($info[0]); - $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query(sprintf('SELECT id FROM %s', $table)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); // A single query with a trailing delimiter. $stmt = $db->query('SELECT 1 AS value;'); var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); - print "done!"; + $db->exec(sprintf('DROP TABLE IF EXISTS %s', $table)); + print "done!"; ?> --EXPECT-- string(5) "00000" diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_oracle_nulls.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_oracle_nulls.phpt index 44503c1053..694a039441 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_oracle_nulls.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_oracle_nulls.phpt @@ -8,78 +8,78 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - $tmp = array(); - if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, $tmp)) - printf("[001] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); + $tmp = array(); + if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, $tmp)) + printf("[001] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); - $tmp = new stdClass(); - if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, $tmp)); - printf("[002] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); + $tmp = new stdClass(); + if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, $tmp)); + printf("[002] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); - if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, 'pdo')) - printf("[003] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); + if (false !== @$db->setAttribute(PDO::ATTR_ORACLE_NULLS, 'pdo')) + printf("[003] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS...\n"); - $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); - $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); + $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 0); - $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 0); + $stmt = $db->query("SELECT NULL AS z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, '" . chr(0) . " e' AS e"); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); - $stmt = $db->query('SELECT VERSION() as _version'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - if ((int)substr($row['_version'], 0, 1) >= 5) - $have_procedures = true; - else - $have_procedures = false; + $db->setAttribute(PDO::ATTR_ORACLE_NULLS, 1); + $stmt = $db->query('SELECT VERSION() as _version'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + if ((int)substr($row['_version'], 0, 1) >= 5) + $have_procedures = true; + else + $have_procedures = false; - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - if ($have_procedures && (false !== $db->exec('DROP PROCEDURE IF EXISTS p')) && - (false !== $db->exec("CREATE PROCEDURE p() BEGIN SELECT NULL as z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, ' e' AS e; END;"))) { - // requires MySQL 5+ - $stmt = $db->prepare('CALL p()'); - $stmt->execute(); - $expected = array( - array( - "z" => NULL, - "a" => NULL, - "b" => " ", - "c" => NULL, - "d" => " d", - "e" => " e", - ), - ); - do { - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if ($tmp != $expected) { - printf("[004] Expecting %s got %s\n", - var_export($expected, true), var_export($tmp, true)); - } - } while ($stmt->nextRowset()); + if ($have_procedures && (false !== $db->exec('DROP PROCEDURE IF EXISTS p')) && + (false !== $db->exec("CREATE PROCEDURE p() BEGIN SELECT NULL as z, '' AS a, ' ' AS b, TRIM(' ') as c, ' d' AS d, ' e' AS e; END;"))) { + // requires MySQL 5+ + $stmt = $db->prepare('CALL p()'); + $stmt->execute(); + $expected = array( + array( + "z" => NULL, + "a" => NULL, + "b" => " ", + "c" => NULL, + "d" => " d", + "e" => " e", + ), + ); + do { + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if ($tmp != $expected) { + printf("[004] Expecting %s got %s\n", + var_export($expected, true), var_export($tmp, true)); + } + } while ($stmt->nextRowset()); - $stmt->execute(); - do { - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if ($tmp != $expected) { - printf("[005] Expecting %s got %s\n", - var_export($expected, true), var_export($tmp, true)); - } - } while ($stmt->nextRowset()); + $stmt->execute(); + do { + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if ($tmp != $expected) { + printf("[005] Expecting %s got %s\n", + var_export($expected, true), var_export($tmp, true)); + } + } while ($stmt->nextRowset()); - } + } - if ($have_procedures) - @$db->exec('DROP PROCEDURE IF EXISTS p'); + if ($have_procedures) + @$db->exec('DROP PROCEDURE IF EXISTS p'); - print "done!"; + print "done!"; ?> --EXPECTF-- [002] Maybe PDO could indicate that this is not a proper way of setting ATTR_ORACLE_NULLS... diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_prefetch.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_prefetch.phpt index f1ca4be1de..155f3514fa 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_prefetch.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_prefetch.phpt @@ -9,11 +9,11 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - var_dump($db->getAttribute(PDO::ATTR_PREFETCH)); - var_dump($db->setAttribute(PDO::ATTR_PREFETCH, true)); - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + var_dump($db->getAttribute(PDO::ATTR_PREFETCH)); + var_dump($db->setAttribute(PDO::ATTR_PREFETCH, true)); + print "done!"; --EXPECTF-- Warning: PDO::getAttribute(): SQLSTATE[IM001]: Driver does not support this function: driver does not support that attribute in %s on line %d bool(false) diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_server_info.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_server_info.phpt index 4a142eee38..d1b6e1e02b 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_server_info.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_server_info.phpt @@ -9,43 +9,43 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); - - $info = $db->getAttribute(PDO::ATTR_SERVER_INFO); - if ('' == $info) - printf("[001] Server info must not be empty\n"); - - // Read-only? - if (false !== $db->setAttribute(PDO::ATTR_SERVER_INFO, 'new uptime: 0s')) - printf("[002] Wonderful, I can change the client version!\n"); - - $new_info = $db->getAttribute(PDO::ATTR_SERVER_INFO); - if (soundex($new_info) != soundex($info)) - printf("[003] Did we change it from '%s' to '%s'?\n", $info, $info); - - // lets hope we always run this in the same second as we did run the server info request... - if (!$stmt = $db->query("SHOW STATUS LIKE '%uptime%'")) - printf("[004] Cannot run SHOW STATUS, [%s]\n", $db->errorCode()); - else { - if (!$row = $stmt->fetch(PDO::FETCH_NUM)) - printf("[005] Unable to fetch uptime, [%s]\n", $db->errorCode()); - else - $uptime = $row[1]; - $stmt->closeCursor(); - } - - if (!preg_match('/Uptime/i', $info)) - printf("[006] Can't find uptime in server info '%s'\n", $info); - - if (isset($uptime)) { - if (!preg_match('/Uptime: (\d+)/i', $info, $matches) || $uptime - $matches[1] > 1) { - printf("[007] SHOW STATUS and server info have reported a different uptime, please check. Server info: '%s', SHOW STATUS: '%s'\n", $info, $uptime); - } - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); + + $info = $db->getAttribute(PDO::ATTR_SERVER_INFO); + if ('' == $info) + printf("[001] Server info must not be empty\n"); + + // Read-only? + if (false !== $db->setAttribute(PDO::ATTR_SERVER_INFO, 'new uptime: 0s')) + printf("[002] Wonderful, I can change the client version!\n"); + + $new_info = $db->getAttribute(PDO::ATTR_SERVER_INFO); + if (soundex($new_info) != soundex($info)) + printf("[003] Did we change it from '%s' to '%s'?\n", $info, $info); + + // lets hope we always run this in the same second as we did run the server info request... + if (!$stmt = $db->query("SHOW STATUS LIKE '%uptime%'")) + printf("[004] Cannot run SHOW STATUS, [%s]\n", $db->errorCode()); + else { + if (!$row = $stmt->fetch(PDO::FETCH_NUM)) + printf("[005] Unable to fetch uptime, [%s]\n", $db->errorCode()); + else + $uptime = $row[1]; + $stmt->closeCursor(); + } + + if (!preg_match('/Uptime/i', $info)) + printf("[006] Can't find uptime in server info '%s'\n", $info); + + if (isset($uptime)) { + if (!preg_match('/Uptime: (\d+)/i', $info, $matches) || $uptime - $matches[1] > 1) { + printf("[007] SHOW STATUS and server info have reported a different uptime, please check. Server info: '%s', SHOW STATUS: '%s'\n", $info, $uptime); + } + } + + print "done!"; --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_server_version.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_server_version.phpt index a635c3771a..62a2fae8b0 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_server_version.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_server_version.phpt @@ -9,57 +9,57 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); + assert(('' == $db->errorCode()) || ('00000' == $db->errorCode())); - $version = $db->getAttribute(PDO::ATTR_SERVER_VERSION); - if ('' == $version) - printf("[001] Server version must not be empty\n"); + $version = $db->getAttribute(PDO::ATTR_SERVER_VERSION); + if ('' == $version) + printf("[001] Server version must not be empty\n"); - // Ideally the server version would be an integer - as documented but BC break! - // If its a version string it should be of the format \d+\.\d+\.\d+.* + // Ideally the server version would be an integer - as documented but BC break! + // If its a version string it should be of the format \d+\.\d+\.\d+.* - if (is_string($version)) { - // Its not an int like documented but a string - maybe for BC reasons... - if (!preg_match('/(\d+)\.(\d+)\.(\d+)(.*)/', $version, $matches)) - printf("[002] Client version string seems wrong, got '%s'\n", $version); - else { - // Difficult to define any meaningful constraints - // A possible better check would be calling mysqli_get_server_version() and - // comparing what we get. However, mysqli_get_server_version() needs a mysqli handle - // for which in turn one needs to parse the PDO test environment variables - // for connection parameter... - if ($matches[1] < 3) - printf("[003] Strange major version: '%s'. Should be more than 3\n", $matches[1]); - if ($matches[2] < 0) - printf("[004] Minor version should be at least 0, got '%s'\n", $matches[2]); - if ($matches[3] < 0) - printf("[005] Sub version should be at least 0, got '%s'\n", $matches[2]); - } - } else if (is_int($version)) { - // Lets accept also int if it follows the rules from the original MYSQL C API - $major = floor($version / 10000); - $minor = floor(($version - ($main * 10000)) / 100); - $sub = $version - ($main * 10000) - ($minor * 100); - if ($major < 3) - printf("[006] Strange major version: '%s'. Should be more than 3\n", $major); - if ($minor < 0) - printf("[007] Minor version should be at least 0, got '%s'\n", $minor); - if ($sub < 0) - printf("[008] Sub version should be at least 0, got '%s'\n", $sub); - } + if (is_string($version)) { + // Its not an int like documented but a string - maybe for BC reasons... + if (!preg_match('/(\d+)\.(\d+)\.(\d+)(.*)/', $version, $matches)) + printf("[002] Client version string seems wrong, got '%s'\n", $version); + else { + // Difficult to define any meaningful constraints + // A possible better check would be calling mysqli_get_server_version() and + // comparing what we get. However, mysqli_get_server_version() needs a mysqli handle + // for which in turn one needs to parse the PDO test environment variables + // for connection parameter... + if ($matches[1] < 3) + printf("[003] Strange major version: '%s'. Should be more than 3\n", $matches[1]); + if ($matches[2] < 0) + printf("[004] Minor version should be at least 0, got '%s'\n", $matches[2]); + if ($matches[3] < 0) + printf("[005] Sub version should be at least 0, got '%s'\n", $matches[2]); + } + } else if (is_int($version)) { + // Lets accept also int if it follows the rules from the original MYSQL C API + $major = floor($version / 10000); + $minor = floor(($version - ($main * 10000)) / 100); + $sub = $version - ($main * 10000) - ($minor * 100); + if ($major < 3) + printf("[006] Strange major version: '%s'. Should be more than 3\n", $major); + if ($minor < 0) + printf("[007] Minor version should be at least 0, got '%s'\n", $minor); + if ($sub < 0) + printf("[008] Sub version should be at least 0, got '%s'\n", $sub); + } - // Read-only? - if (false !== $db->setAttribute(PDO::ATTR_CLIENT_VERSION, '1.0')) - printf("[009] Wonderful, I can change the client version!\n"); + // Read-only? + if (false !== $db->setAttribute(PDO::ATTR_CLIENT_VERSION, '1.0')) + printf("[009] Wonderful, I can change the client version!\n"); - $new_version = $db->getAttribute(PDO::ATTR_SERVER_VERSION); - if ($new_version !== $version) - printf("[010] Did we change it from '%s' to '%s'?\n", $version, $new_version); + $new_version = $db->getAttribute(PDO::ATTR_SERVER_VERSION); + if ($new_version !== $version) + printf("[010] Did we change it from '%s' to '%s'?\n", $version, $new_version); - print "done!"; + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt index 237f03af38..e8bdd16434 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_attr_statement_class.phpt @@ -9,100 +9,100 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - - $default = $db->getAttribute(PDO::ATTR_STATEMENT_CLASS); - var_dump($default); - - if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, 'foo'))) - printf("[002] Expecting boolean/false got %s\n", var_export($tmp, true)); - - if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('classname')))) - printf("[003] Expecting boolean/false got %s\n", var_export($tmp, true)); - - // unknown class - if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('classname', array())))) - printf("[004] Expecting boolean/false got %s\n", var_export($tmp, true)); - - // class not derived from PDOStatement - class myclass { - function __construct() { - printf("myclass\n"); - } - } - if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('myclass', array())))) - printf("[005] Expecting boolean/false got %s\n", var_export($tmp, true)); - - // public constructor not allowed - class mystatement extends PDOStatement { - public function __construct() { - printf("mystatement\n"); - } - } - - if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement', array())))) - printf("[006] Expecting boolean/false got %s\n", var_export($tmp, true)); - - // ... but a public destructor is allowed - class mystatement2 extends PDOStatement { - public function __destruct() { - printf("mystatement\n"); - } - } - - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement2', array())))) - printf("[007] Expecting boolean/true got %s\n", var_export($tmp, true)); - - // private constructor - class mystatement3 extends PDOStatement { - private function __construct($msg) { - printf("mystatement3\n"); - var_dump($msg); - } - } - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement3', array('param1'))))) - printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true)); - - // private constructor - class mystatement4 extends PDOStatement { - private function __construct($msg) { - printf("%s\n", get_class($this)); - var_dump($msg); - } - } - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement4', array('param1'))))) - printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true)); - - var_dump($db->getAttribute(PDO::ATTR_STATEMENT_CLASS)); - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); - - class mystatement5 extends mystatement4 { - public function fetchAll($fetch_style = 1, $column_index = 1, $ctor_args = array()) { - return "no data :)"; - } - } - - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement5', array('mystatement5'))))) - printf("[009] Expecting boolean/true got %s\n", var_export($tmp, true)); - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); - var_dump($stmt->fetchAll()); - - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement')))) - printf("[010] Expecting boolean/true got %s\n", var_export($tmp, true)); - - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1'); - var_dump($stmt->fetchAll()); - - // Yes, this is a fatal error and I want it to fail. - abstract class mystatement6 extends mystatement5 { - } - if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement6', array('mystatement6'))))) - printf("[011] Expecting boolean/true got %s\n", var_export($tmp, true)); - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1'); - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + + $default = $db->getAttribute(PDO::ATTR_STATEMENT_CLASS); + var_dump($default); + + if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, 'foo'))) + printf("[002] Expecting boolean/false got %s\n", var_export($tmp, true)); + + if (false !== ($tmp = @$db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('classname')))) + printf("[003] Expecting boolean/false got %s\n", var_export($tmp, true)); + + // unknown class + if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('classname', array())))) + printf("[004] Expecting boolean/false got %s\n", var_export($tmp, true)); + + // class not derived from PDOStatement + class myclass { + function __construct() { + printf("myclass\n"); + } + } + if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('myclass', array())))) + printf("[005] Expecting boolean/false got %s\n", var_export($tmp, true)); + + // public constructor not allowed + class mystatement extends PDOStatement { + public function __construct() { + printf("mystatement\n"); + } + } + + if (false !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement', array())))) + printf("[006] Expecting boolean/false got %s\n", var_export($tmp, true)); + + // ... but a public destructor is allowed + class mystatement2 extends PDOStatement { + public function __destruct() { + printf("mystatement\n"); + } + } + + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement2', array())))) + printf("[007] Expecting boolean/true got %s\n", var_export($tmp, true)); + + // private constructor + class mystatement3 extends PDOStatement { + private function __construct($msg) { + printf("mystatement3\n"); + var_dump($msg); + } + } + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement3', array('param1'))))) + printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true)); + + // private constructor + class mystatement4 extends PDOStatement { + private function __construct($msg) { + printf("%s\n", get_class($this)); + var_dump($msg); + } + } + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement4', array('param1'))))) + printf("[008] Expecting boolean/true got %s\n", var_export($tmp, true)); + + var_dump($db->getAttribute(PDO::ATTR_STATEMENT_CLASS)); + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); + + class mystatement5 extends mystatement4 { + public function fetchAll($fetch_style = 1, $column_index = 1, $ctor_args = array()) { + return "no data :)"; + } + } + + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement5', array('mystatement5'))))) + printf("[009] Expecting boolean/true got %s\n", var_export($tmp, true)); + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); + var_dump($stmt->fetchAll()); + + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('PDOStatement')))) + printf("[010] Expecting boolean/true got %s\n", var_export($tmp, true)); + + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1'); + var_dump($stmt->fetchAll()); + + // Yes, this is a fatal error and I want it to fail. + abstract class mystatement6 extends mystatement5 { + } + if (true !== ($tmp = $db->setAttribute(PDO::ATTR_STATEMENT_CLASS, array('mystatement6', array('mystatement6'))))) + printf("[011] Expecting boolean/true got %s\n", var_export($tmp, true)); + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 1'); + + print "done!"; ?> --EXPECTF-- array(1) { diff --git a/ext/pdo_mysql/tests/pdo_mysql_begintransaction.phpt b/ext/pdo_mysql/tests/pdo_mysql_begintransaction.phpt index f2653f4b6b..2fc60f9fc2 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_begintransaction.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_begintransaction.phpt @@ -11,175 +11,175 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[001] Autocommit should be on by default\n"); + if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[001] Autocommit should be on by default\n"); - if (false == $db->beginTransaction()) - printf("[002] Cannot start a transaction, [%s] [%s]\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (false == $db->beginTransaction()) + printf("[002] Cannot start a transaction, [%s] [%s]\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[003] Autocommit should be on by default, beginTransaction() shall not impact it\n"); + if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[003] Autocommit should be on by default, beginTransaction() shall not impact it\n"); - if (0 == $db->exec('DELETE FROM test')) - printf("[004] No rows deleted, can't be true.\n"); + if (0 == $db->exec('DELETE FROM test')) + printf("[004] No rows deleted, can't be true.\n"); - /* This is the PDO way to close a connection */ - $db = null; - $db = MySQLPDOTest::factory(); + /* This is the PDO way to close a connection */ + $db = null; + $db = MySQLPDOTest::factory(); - /* Autocommit was off - by definition. Commit was not issued. DELETE should have been rolled back. */ - if (!($stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC'))) - printf("[005] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + /* Autocommit was off - by definition. Commit was not issued. DELETE should have been rolled back. */ + if (!($stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC'))) + printf("[005] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - var_dump($row); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + var_dump($row); - if (!$db->beginTransaction()) - printf("[006] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->beginTransaction()) + printf("[006] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->exec(sprintf('DELETE FROM test WHERE id = %d', $row['id']))) - printf("[007] DELETE should have indicated 1 deleted row, [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (1 !== $db->exec(sprintf('DELETE FROM test WHERE id = %d', $row['id']))) + printf("[007] DELETE should have indicated 1 deleted row, [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (!$db->commit()) - printf("[008] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->commit()) + printf("[008] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[009] Autocommit should be on after commit()\n"); + if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[009] Autocommit should be on after commit()\n"); - if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) - printf("[010] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) + printf("[010] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - var_dump($stmt->fetch(PDO::FETCH_ASSOC)); + var_dump($stmt->fetch(PDO::FETCH_ASSOC)); - if (!$db->beginTransaction()) - printf("[011] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->beginTransaction()) + printf("[011] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $db->exec(sprintf("INSERT INTO test(id, label) VALUES (%d, 'z')", $row['id'])); + $db->exec(sprintf("INSERT INTO test(id, label) VALUES (%d, 'z')", $row['id'])); - if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) - printf("[012] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) + printf("[012] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $new_row1 = $stmt->fetch(PDO::FETCH_ASSOC); - var_dump($new_row1); + $new_row1 = $stmt->fetch(PDO::FETCH_ASSOC); + var_dump($new_row1); - if (!$db->commit()) - printf("[013] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->commit()) + printf("[013] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) - printf("[014] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) + printf("[014] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $new_row2 = $stmt->fetch(PDO::FETCH_ASSOC); - if ($new_row1 != $new_row2) { - printf("[015] Results must not differ!\n"); - var_dump($new_row1); - var_dump($new_row2); - } + $new_row2 = $stmt->fetch(PDO::FETCH_ASSOC); + if ($new_row1 != $new_row2) { + printf("[015] Results must not differ!\n"); + var_dump($new_row1); + var_dump($new_row2); + } - if (!$db->beginTransaction()) - printf("[016] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->beginTransaction()) + printf("[016] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->exec(sprintf('DELETE FROM test WHERE id = %d', $row['id']))) - printf("[017] DELETE should have indicated 1 deleted row, [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (1 !== $db->exec(sprintf('DELETE FROM test WHERE id = %d', $row['id']))) + printf("[017] DELETE should have indicated 1 deleted row, [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (!$db->rollback()) - printf("[018] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->rollback()) + printf("[018] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[019] Autocommit should be on after rollback\n"); + if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[019] Autocommit should be on after rollback\n"); - if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) - printf("[020] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!($stmt = $db->query(sprintf('SELECT id, label FROM test WHERE id = %d', $row['id'])))) + printf("[020] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $new_row2 = $stmt->fetch(PDO::FETCH_ASSOC); - if ($new_row1 != $new_row2) { - printf("[021] Results must not differ!\n"); - var_dump($new_row1); - var_dump($new_row2); - } + $new_row2 = $stmt->fetch(PDO::FETCH_ASSOC); + if ($new_row1 != $new_row2) { + printf("[021] Results must not differ!\n"); + var_dump($new_row1); + var_dump($new_row2); + } - // now, lets check the server variables - if (!($stmt = $db->query('SELECT @@autocommit as auto_commit'))) - printf("[022] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + // now, lets check the server variables + if (!($stmt = $db->query('SELECT @@autocommit as auto_commit'))) + printf("[022] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['auto_commit'] != 1) - printf("[023] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n", - $tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo()); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['auto_commit'] != 1) + printf("[023] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n", + $tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo()); - if (!$db->beginTransaction()) - printf("[024] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->beginTransaction()) + printf("[024] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (!($stmt = $db->query('SELECT @@autocommit as auto_commit'))) - printf("[025] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!($stmt = $db->query('SELECT @@autocommit as auto_commit'))) + printf("[025] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['auto_commit'] != 0) - printf("[026] Autocommit mode of the MySQL Server should be off, got '%s', [%d] %s\n", - $tmp['auto_commit'], $stmt->errorCode(), trim(implode(' ', $stmt->errorInfo()))); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['auto_commit'] != 0) + printf("[026] Autocommit mode of the MySQL Server should be off, got '%s', [%d] %s\n", + $tmp['auto_commit'], $stmt->errorCode(), trim(implode(' ', $stmt->errorInfo()))); - $db->commit(); - // Now we should be back to autocommit - we've issues a commit - if ($tmp['auto_commit'] != 1) - printf("[027] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n", - $tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo()); + $db->commit(); + // Now we should be back to autocommit - we've issues a commit + if ($tmp['auto_commit'] != 1) + printf("[027] MySQL Server should indicate autocommit mode, expecting 1, got '%s', [%d] %s\n", + $tmp['auto_commit'], $stmt->errorCode(), $stmt->errorInfo()); - // Turn off autocommit using a server variable - $db->exec('SET @@autocommit = 0'); - if (1 === $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[028] I'm confused, how can autocommit be on? Didn't I say I want to manually control transactions?\n"); + // Turn off autocommit using a server variable + $db->exec('SET @@autocommit = 0'); + if (1 === $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[028] I'm confused, how can autocommit be on? Didn't I say I want to manually control transactions?\n"); - if (!$db->beginTransaction()) - printf("[029] Cannot start a transaction, [%d] %s\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->beginTransaction()) + printf("[029] Cannot start a transaction, [%d] %s\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - try { - if (false !== $db->beginTransaction()) { - printf("[030] No false and no exception - that's wrong.\n"); - } - } catch (PDOException $e) { - assert($e->getMessage() != ''); - } + try { + if (false !== $db->beginTransaction()) { + printf("[030] No false and no exception - that's wrong.\n"); + } + } catch (PDOException $e) { + assert($e->getMessage() != ''); + } - // TODO: What about an engine that does not support transactions? - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, 'MyISAM'); + // TODO: What about an engine that does not support transactions? + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, 'MyISAM'); - if (false == $db->beginTransaction()) - printf("[031] Cannot start a transaction, [%s] [%s]\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (false == $db->beginTransaction()) + printf("[031] Cannot start a transaction, [%s] [%s]\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) - printf("[032] Autocommit should be on my default, beginTransaction() should not change that\n"); + if (1 !== $db->getAttribute(PDO::ATTR_AUTOCOMMIT)) + printf("[032] Autocommit should be on my default, beginTransaction() should not change that\n"); - if (0 == $db->exec('DELETE FROM test')) - printf("[033] No rows deleted, can't be true.\n"); + if (0 == $db->exec('DELETE FROM test')) + printf("[033] No rows deleted, can't be true.\n"); - if (!$db->commit()) - printf("[034] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + if (!$db->commit()) + printf("[034] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - if (false == $db->beginTransaction()) - printf("[035] Cannot start a transaction, [%s] [%s]\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (false == $db->beginTransaction()) + printf("[035] Cannot start a transaction, [%s] [%s]\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - if (0 == $db->exec("INSERT INTO test(id, label) VALUES (1, 'a')")) - printf("[036] Cannot insert data, [%s] [%s]\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (0 == $db->exec("INSERT INTO test(id, label) VALUES (1, 'a')")) + printf("[036] Cannot insert data, [%s] [%s]\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - // Should cause a Server warning but no error - if (!$db->rollback()) - printf("[037] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + // Should cause a Server warning but no error + if (!$db->rollback()) + printf("[037] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - var_dump($db->errorCode()); + var_dump($db->errorCode()); - if (1 != $db->exec('DELETE FROM test')) - printf("[038] No rows deleted, can't be true.\n"); + if (1 != $db->exec('DELETE FROM test')) + printf("[038] No rows deleted, can't be true.\n"); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_bit.phpt b/ext/pdo_mysql/tests/pdo_mysql_bit.phpt index caa81e96ac..9e53f18154 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_bit.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_bit.phpt @@ -10,42 +10,42 @@ if (MySQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - /* TODO: remove this test after fix and enable the BIT test in pdo_mysql_types.phpt again */ - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + /* TODO: remove this test after fix and enable the BIT test in pdo_mysql_types.phpt again */ + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL) { + function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL) { - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); - @$db->exec($sql); - if ($db->errorCode() != 0) { - // not all MySQL Server versions and/or engines might support the type - return true; - } + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); + @$db->exec($sql); + if ($db->errorCode() != 0) { + // not all MySQL Server versions and/or engines might support the type + return true; + } - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); - $stmt->bindValue(1, $offset); - $stmt->bindValue(2, $value); - if (!$stmt->execute()) { - printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); - return false; - } - $stmt = $db->query('SELECT id, label FROM test'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - var_dump($row); - var_dump($value); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); + $stmt->bindValue(1, $offset); + $stmt->bindValue(2, $value); + if (!$stmt->execute()) { + printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); + return false; + } + $stmt = $db->query('SELECT id, label FROM test'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + var_dump($row); + var_dump($value); - return true; - } + return true; + } - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - test_type($db, 20, 'BIT(8)', 1); + test_type($db, 20, 'BIT(8)', 1); - echo "done!\n"; + echo "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_class_constants.phpt b/ext/pdo_mysql/tests/pdo_mysql_class_constants.phpt index 05f3151e8b..e5809c5a76 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_class_constants.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_class_constants.phpt @@ -11,95 +11,95 @@ if (!extension_loaded('mysqli') && !extension_loaded('mysqlnd')) { ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $expected = array( - 'MYSQL_ATTR_USE_BUFFERED_QUERY' => true, - 'MYSQL_ATTR_LOCAL_INFILE' => true, - 'MYSQL_ATTR_DIRECT_QUERY' => true, - 'MYSQL_ATTR_FOUND_ROWS' => true, - 'MYSQL_ATTR_IGNORE_SPACE' => true, - 'MYSQL_ATTR_INIT_COMMAND' => true, - "MYSQL_ATTR_SSL_KEY" => true, - "MYSQL_ATTR_SSL_CERT" => true, - "MYSQL_ATTR_SSL_CA" => true, - "MYSQL_ATTR_SSL_CAPATH" => true, - "MYSQL_ATTR_SSL_CIPHER" => true, - "MYSQL_ATTR_COMPRESS" => true, - "MYSQL_ATTR_MULTI_STATEMENTS" => true, - "MYSQL_ATTR_SSL_VERIFY_SERVER_CERT" => true, - ); + $expected = array( + 'MYSQL_ATTR_USE_BUFFERED_QUERY' => true, + 'MYSQL_ATTR_LOCAL_INFILE' => true, + 'MYSQL_ATTR_DIRECT_QUERY' => true, + 'MYSQL_ATTR_FOUND_ROWS' => true, + 'MYSQL_ATTR_IGNORE_SPACE' => true, + 'MYSQL_ATTR_INIT_COMMAND' => true, + "MYSQL_ATTR_SSL_KEY" => true, + "MYSQL_ATTR_SSL_CERT" => true, + "MYSQL_ATTR_SSL_CA" => true, + "MYSQL_ATTR_SSL_CAPATH" => true, + "MYSQL_ATTR_SSL_CIPHER" => true, + "MYSQL_ATTR_COMPRESS" => true, + "MYSQL_ATTR_MULTI_STATEMENTS" => true, + "MYSQL_ATTR_SSL_VERIFY_SERVER_CERT" => true, + ); - if (!MySQLPDOTest::isPDOMySQLnd()) { - $expected['MYSQL_ATTR_MAX_BUFFER_SIZE'] = true; - $expected['MYSQL_ATTR_READ_DEFAULT_FILE'] = true; - $expected['MYSQL_ATTR_READ_DEFAULT_GROUP'] = true; - } + if (!MySQLPDOTest::isPDOMySQLnd()) { + $expected['MYSQL_ATTR_MAX_BUFFER_SIZE'] = true; + $expected['MYSQL_ATTR_READ_DEFAULT_FILE'] = true; + $expected['MYSQL_ATTR_READ_DEFAULT_GROUP'] = true; + } - if (extension_loaded('mysqlnd')) { - $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; - } else if (extension_loaded('mysqli')) { - if (mysqli_get_client_version() > 50605) { - $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; - } - } else if (MySQLPDOTest::getClientVersion(MySQLPDOTest::factory()) > 50605) { - /* XXX the MySQL client library version isn't exposed with any - constants, the single possibility is to use the PDO::getAttribute(). - This however will fail with no connection. */ - $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; - } + if (extension_loaded('mysqlnd')) { + $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; + } else if (extension_loaded('mysqli')) { + if (mysqli_get_client_version() > 50605) { + $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; + } + } else if (MySQLPDOTest::getClientVersion(MySQLPDOTest::factory()) > 50605) { + /* XXX the MySQL client library version isn't exposed with any + constants, the single possibility is to use the PDO::getAttribute(). + This however will fail with no connection. */ + $expected['MYSQL_ATTR_SERVER_PUBLIC_KEY'] = true; + } - /* - TODO + /* + TODO - MYSQLI_OPT_CONNECT_TIMEOUT != PDO::ATTR_TIMEOUT (integer) + MYSQLI_OPT_CONNECT_TIMEOUT != PDO::ATTR_TIMEOUT (integer) Sets the timeout value in seconds for communications with the database. - ^ Potential BUG, PDO::ATTR_TIMEOUT is used in pdo_mysql_handle_factory + ^ Potential BUG, PDO::ATTR_TIMEOUT is used in pdo_mysql_handle_factory - MYSQLI_SET_CHARSET_NAME -> DSN/charset=<charset_name> - ^ Undocumented and pitfall for ext/mysqli users + MYSQLI_SET_CHARSET_NAME -> DSN/charset=<charset_name> + ^ Undocumented and pitfall for ext/mysqli users - Assorted mysqlnd settings missing - */ - $ref = new ReflectionClass('PDO'); - $constants = $ref->getConstants(); - $values = array(); + Assorted mysqlnd settings missing + */ + $ref = new ReflectionClass('PDO'); + $constants = $ref->getConstants(); + $values = array(); - foreach ($constants as $name => $value) - if (substr($name, 0, 11) == 'MYSQL_ATTR_') { - if (!isset($values[$value])) - $values[$value] = array($name); - else - $values[$value][] = $name; + foreach ($constants as $name => $value) + if (substr($name, 0, 11) == 'MYSQL_ATTR_') { + if (!isset($values[$value])) + $values[$value] = array($name); + else + $values[$value][] = $name; - if (isset($expected[$name])) { - unset($expected[$name]); - unset($constants[$name]); - } + if (isset($expected[$name])) { + unset($expected[$name]); + unset($constants[$name]); + } - } else { - unset($constants[$name]); - } + } else { + unset($constants[$name]); + } - if (!empty($constants)) { - printf("[001] Dumping list of unexpected constants\n"); - var_dump($constants); - } + if (!empty($constants)) { + printf("[001] Dumping list of unexpected constants\n"); + var_dump($constants); + } - if (!empty($expected)) { - printf("[002] Dumping list of missing constants\n"); - var_dump($expected); - } + if (!empty($expected)) { + printf("[002] Dumping list of missing constants\n"); + var_dump($expected); + } - if (!empty($values)) { - foreach ($values as $value => $constants) { - if (count($constants) > 1) { - printf("[003] Several constants share the same value '%s'\n", $value); - var_dump($constants); - } - } - } + if (!empty($values)) { + foreach ($values as $value => $constants) { + if (count($constants) > 1) { + printf("[003] Several constants share the same value '%s'\n", $value); + var_dump($constants); + } + } + } - print "done!"; + print "done!"; --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt index 6141ff611b..9dec5700b6 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_commit.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_commit.phpt @@ -11,74 +11,74 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - try { - if (true !== ($tmp = $db->beginTransaction())) { - printf("[001] Expecting true, got %s/%s\n", gettype($tmp), $tmp); - } + try { + if (true !== ($tmp = $db->beginTransaction())) { + printf("[001] Expecting true, got %s/%s\n", gettype($tmp), $tmp); + } - // DDL will issue an implicit commit - $db->exec(sprintf('DROP TABLE IF EXISTS test_commit')); - $db->exec(sprintf('CREATE TABLE test_commit(id INT) ENGINE=%s', MySQLPDOTest::detect_transactional_mysql_engine($db))); - if (true !== ($tmp = $db->commit())) { - printf("[002] No commit allowed? [%s] %s\n", - $db->errorCode(), implode(' ', $db->errorInfo())); - } + // DDL will issue an implicit commit + $db->exec(sprintf('DROP TABLE IF EXISTS test_commit')); + $db->exec(sprintf('CREATE TABLE test_commit(id INT) ENGINE=%s', MySQLPDOTest::detect_transactional_mysql_engine($db))); + if (true !== ($tmp = $db->commit())) { + printf("[002] No commit allowed? [%s] %s\n", + $db->errorCode(), implode(' ', $db->errorInfo())); + } - // pdo_transaction_transitions should check this as well... - // ... just to be sure the most basic stuff really works we check it again... - if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) - printf("[003] According to the manual we should be back to autocommit mode, got %s/%s\n", - gettype($tmp), var_export($tmp, true)); + // pdo_transaction_transitions should check this as well... + // ... just to be sure the most basic stuff really works we check it again... + if (1 !== ($tmp = $db->getAttribute(PDO::ATTR_AUTOCOMMIT))) + printf("[003] According to the manual we should be back to autocommit mode, got %s/%s\n", + gettype($tmp), var_export($tmp, true)); - if (true !== ($tmp = $db->beginTransaction())) - printf("[004] Expecting true, got %s/%s\n", gettype($tmp), $tmp); + if (true !== ($tmp = $db->beginTransaction())) + printf("[004] Expecting true, got %s/%s\n", gettype($tmp), $tmp); - $db->exec("INSERT INTO test(id, label) VALUES (100, 'z')"); + $db->exec("INSERT INTO test(id, label) VALUES (100, 'z')"); - if (true !== ($tmp = $db->commit())) - printf("[005] No commit allowed? [%s] %s\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + if (true !== ($tmp = $db->commit())) + printf("[005] No commit allowed? [%s] %s\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - // a weak test without unicode etc. - lets leave that to dedicated tests - $stmt = $db->query('SELECT id, label FROM test WHERE id = 100'); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (!isset($rows[0]['label']) || ($rows[0]['label'] != 'z')) { - printf("[006] Record data is strange, dumping rows\n"); - var_dump($rows); - } + // a weak test without unicode etc. - lets leave that to dedicated tests + $stmt = $db->query('SELECT id, label FROM test WHERE id = 100'); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (!isset($rows[0]['label']) || ($rows[0]['label'] != 'z')) { + printf("[006] Record data is strange, dumping rows\n"); + var_dump($rows); + } - // Ok, lets check MyISAM resp. any other non-transactional engine - // pdo_mysql_begin_transaction has more on this, quick check only - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, 'MyISAM'); + // Ok, lets check MyISAM resp. any other non-transactional engine + // pdo_mysql_begin_transaction has more on this, quick check only + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, 'MyISAM'); - if (true !== ($tmp = $db->beginTransaction())) - printf("[007] Expecting true, got %s/%s\n", gettype($tmp), $tmp); + if (true !== ($tmp = $db->beginTransaction())) + printf("[007] Expecting true, got %s/%s\n", gettype($tmp), $tmp); - $db->exec("INSERT INTO test(id, label) VALUES (100, 'z')"); - if (true !== ($tmp = $db->commit())) - printf("[008] No commit allowed? [%s] %s\n", - $db->errorCode(), implode(' ', $db->errorInfo())); + $db->exec("INSERT INTO test(id, label) VALUES (100, 'z')"); + if (true !== ($tmp = $db->commit())) + printf("[008] No commit allowed? [%s] %s\n", + $db->errorCode(), implode(' ', $db->errorInfo())); - // a weak test without unicode etc. - lets leave that to dedicated tests - $stmt = $db->query('SELECT id, label FROM test WHERE id = 100'); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (!isset($rows[0]['label']) || ($rows[0]['label'] != 'z')) { - printf("[009] Record data is strange, dumping rows\n"); - var_dump($rows); - } + // a weak test without unicode etc. - lets leave that to dedicated tests + $stmt = $db->query('SELECT id, label FROM test WHERE id = 100'); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (!isset($rows[0]['label']) || ($rows[0]['label'] != 'z')) { + printf("[009] Record data is strange, dumping rows\n"); + var_dump($rows); + } - } catch (PDOException $e) { - printf("[002] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[002] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; --CLEAN-- <?php require __DIR__ . '/mysql_pdo_test.inc'; diff --git a/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt index 84ce556d32..294d45e586 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_connect_charset.phpt @@ -8,26 +8,26 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - /* Connect to mysql to determine the current charset so we can diffinate it */ - $link = MySQLPDOTest::factory(); - $charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; + /* Connect to mysql to determine the current charset so we can diffinate it */ + $link = MySQLPDOTest::factory(); + $charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; - /* Make sure that we don't attempt to set the current character set to make this case useful */ - $new_charset = ($charset == 'latin1' ? 'ascii' : 'latin1'); + /* Make sure that we don't attempt to set the current character set to make this case useful */ + $new_charset = ($charset == 'latin1' ? 'ascii' : 'latin1'); - /* Done with the original connection, create a second link to test the character set being defined */ - unset($link); + /* Done with the original connection, create a second link to test the character set being defined */ + unset($link); - $link = MySQLPDOTest::factory('PDO', false, null, Array('charset' => $new_charset)); - $conn_charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; + $link = MySQLPDOTest::factory('PDO', false, null, Array('charset' => $new_charset)); + $conn_charset = $link->query("SHOW VARIABLES LIKE 'character_set_connection'")->fetchObject()->value; - if ($charset !== $conn_charset) { - echo "done!\n"; - } else { - echo "failed!\n"; - } + if ($charset !== $conn_charset) { + echo "done!\n"; + } else { + echo "failed!\n"; + } ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_errorcode.phpt index 5bf6c10448..c2b07100c0 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_errorcode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_errorcode.phpt @@ -9,73 +9,73 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - function check_error($offset, &$obj, $expected = '00000') { + function check_error($offset, &$obj, $expected = '00000') { - $code = $obj->errorCode(); - if (($code != $expected) && (($expected != '00000') && ($code != ''))) { - printf("[%03d] Expecting error code '%s' got code '%s'\n", - $offset, $expected, $code); - } + $code = $obj->errorCode(); + if (($code != $expected) && (($expected != '00000') && ($code != ''))) { + printf("[%03d] Expecting error code '%s' got code '%s'\n", + $offset, $expected, $code); + } - } + } - try { + try { - /* - If you create a PDOStatement object through PDO->prepare() - or PDO->query() and invoke an error on the statement handle, - PDO->errorCode() will not reflect that error. You must call - PDOStatement->errorCode() to return the error code for an - operation performed on a particular statement handle. - */ - $code = $db->errorCode(); - check_error(2, $db); + /* + If you create a PDOStatement object through PDO->prepare() + or PDO->query() and invoke an error on the statement handle, + PDO->errorCode() will not reflect that error. You must call + PDOStatement->errorCode() to return the error code for an + operation performed on a particular statement handle. + */ + $code = $db->errorCode(); + check_error(2, $db); - $stmt = $db->query('SELECT id, label FROM test'); - $stmt2 = &$stmt; - check_error(3, $db); - check_error(4, $stmt); + $stmt = $db->query('SELECT id, label FROM test'); + $stmt2 = &$stmt; + check_error(3, $db); + check_error(4, $stmt); - $db->exec('DROP TABLE IF EXISTS test'); - @$stmt->execute(); - check_error(4, $db); - check_error(5, $stmt, '42S02'); - check_error(6, $stmt2, '42S02'); + $db->exec('DROP TABLE IF EXISTS test'); + @$stmt->execute(); + check_error(4, $db); + check_error(5, $stmt, '42S02'); + check_error(6, $stmt2, '42S02'); - $db->exec('DROP TABLE IF EXISTS unknown'); - @$stmt = $db->query('SELECT id, label FROM unknown'); - check_error(7, $db, '42S02'); + $db->exec('DROP TABLE IF EXISTS unknown'); + @$stmt = $db->query('SELECT id, label FROM unknown'); + check_error(7, $db, '42S02'); - MySQLPDOTest::createTestTable($db); - $stmt = $db->query('SELECT id, label FROM test'); - check_error(8, $db); - check_error(9, $stmt); + MySQLPDOTest::createTestTable($db); + $stmt = $db->query('SELECT id, label FROM test'); + check_error(8, $db); + check_error(9, $stmt); - $db2 = &$db; - @$db->query('SELECT id, label FROM unknown'); - check_error(10, $db, '42S02'); - check_error(11, $db2, '42S02'); - check_error(12, $stmt); - check_error(13, $stmt2); + $db2 = &$db; + @$db->query('SELECT id, label FROM unknown'); + check_error(10, $db, '42S02'); + check_error(11, $db2, '42S02'); + check_error(12, $stmt); + check_error(13, $stmt2); - // lets hope this is an invalid attribute code - $invalid_attr = -1 * PHP_INT_MAX + 3; - $tmp = @$db->getAttribute($invalid_attr); - check_error(14, $db, 'IM001'); - check_error(15, $db2, 'IM001'); - check_error(16, $stmt); - check_error(17, $stmt2); + // lets hope this is an invalid attribute code + $invalid_attr = -1 * PHP_INT_MAX + 3; + $tmp = @$db->getAttribute($invalid_attr); + check_error(14, $db, 'IM001'); + check_error(15, $db2, 'IM001'); + check_error(16, $stmt); + check_error(17, $stmt2); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_errorinfo.phpt b/ext/pdo_mysql/tests/pdo_mysql_errorinfo.phpt index 487f8ab97a..2da0f4aaa3 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_errorinfo.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_errorinfo.phpt @@ -9,92 +9,92 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - - function check_error($offset, &$obj, $expected = '00000') { - $info = $obj->errorInfo(); - $code = $info[0]; - - if (($code != $expected) && (($expected != '00000') && ($code != ''))) { - printf("[%03d] Expecting error code '%s' got code '%s'\n", - $offset, $expected, $code); - } - - if ($expected != '00000') { - if (!isset($info[1]) || $info[1] == '') - printf("[%03d] Driver-specific error code not set\n", $offset); - if (!isset($info[2]) || $info[2] == '') - printf("[%03d] Driver-specific error message.not set\n", $offset); - } - - } - - function pdo_mysql_errorinfo($db, $offset) { - - try { - - /* - If you create a PDOStatement object through PDO->prepare() - or PDO->query() and invoke an error on the statement handle, - PDO->errorCode() will not reflect that error. You must call - PDOStatement->errorCode() to return the error code for an - operation performed on a particular statement handle. - */ - $code = $db->errorCode(); - check_error($offset + 2, $db); - - $stmt = $db->query('SELECT id, label FROM test'); - $stmt2 = &$stmt; - check_error($offset + 3, $db); - check_error($offset + 4, $stmt); - - $db->exec('DROP TABLE IF EXISTS test'); - @$stmt->execute(); - check_error($offset + 5, $db); - check_error($offset + 6, $stmt, '42S02'); - check_error($offset + 7, $stmt2, '42S02'); - - @$stmt = $db->query('SELECT id, label FROM unknown'); - check_error($offset + 8, $db, '42S02'); - - MySQLPDOTest::createTestTable($db); - $stmt = $db->query('SELECT id, label FROM test'); - check_error($offset + 9, $db); - check_error($offset + 10, $stmt); - - $db2 = &$db; - $db->exec('DROP TABLE IF EXISTS unknown'); - @$db->query('SELECT id, label FROM unknown'); - check_error($offset + 11, $db, '42S02'); - check_error($offset + 12, $db2, '42S02'); - check_error($offset + 13, $stmt); - check_error($offset + 14, $stmt2); - - // lets hope this is an invalid attribute code - $invalid_attr = -1 * PHP_INT_MAX + 3; - $tmp = @$db->getAttribute($invalid_attr); - check_error($offset + 15, $db, 'IM001'); - check_error($offset + 16, $db2, 'IM001'); - check_error($offset + 17, $stmt); - check_error($offset + 18, $stmt2); - - } catch (PDOException $e) { - printf("[%03d] %s [%s] %s\n", - $offset + 19, $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - } - - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - printf("Emulated Prepared Statements...\n"); - pdo_mysql_errorinfo($db, 0); - - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - printf("Native Prepared Statements...\n"); - pdo_mysql_errorinfo($db, 20); - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + + function check_error($offset, &$obj, $expected = '00000') { + $info = $obj->errorInfo(); + $code = $info[0]; + + if (($code != $expected) && (($expected != '00000') && ($code != ''))) { + printf("[%03d] Expecting error code '%s' got code '%s'\n", + $offset, $expected, $code); + } + + if ($expected != '00000') { + if (!isset($info[1]) || $info[1] == '') + printf("[%03d] Driver-specific error code not set\n", $offset); + if (!isset($info[2]) || $info[2] == '') + printf("[%03d] Driver-specific error message.not set\n", $offset); + } + + } + + function pdo_mysql_errorinfo($db, $offset) { + + try { + + /* + If you create a PDOStatement object through PDO->prepare() + or PDO->query() and invoke an error on the statement handle, + PDO->errorCode() will not reflect that error. You must call + PDOStatement->errorCode() to return the error code for an + operation performed on a particular statement handle. + */ + $code = $db->errorCode(); + check_error($offset + 2, $db); + + $stmt = $db->query('SELECT id, label FROM test'); + $stmt2 = &$stmt; + check_error($offset + 3, $db); + check_error($offset + 4, $stmt); + + $db->exec('DROP TABLE IF EXISTS test'); + @$stmt->execute(); + check_error($offset + 5, $db); + check_error($offset + 6, $stmt, '42S02'); + check_error($offset + 7, $stmt2, '42S02'); + + @$stmt = $db->query('SELECT id, label FROM unknown'); + check_error($offset + 8, $db, '42S02'); + + MySQLPDOTest::createTestTable($db); + $stmt = $db->query('SELECT id, label FROM test'); + check_error($offset + 9, $db); + check_error($offset + 10, $stmt); + + $db2 = &$db; + $db->exec('DROP TABLE IF EXISTS unknown'); + @$db->query('SELECT id, label FROM unknown'); + check_error($offset + 11, $db, '42S02'); + check_error($offset + 12, $db2, '42S02'); + check_error($offset + 13, $stmt); + check_error($offset + 14, $stmt2); + + // lets hope this is an invalid attribute code + $invalid_attr = -1 * PHP_INT_MAX + 3; + $tmp = @$db->getAttribute($invalid_attr); + check_error($offset + 15, $db, 'IM001'); + check_error($offset + 16, $db2, 'IM001'); + check_error($offset + 17, $stmt); + check_error($offset + 18, $stmt2); + + } catch (PDOException $e) { + printf("[%03d] %s [%s] %s\n", + $offset + 19, $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + } + + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + printf("Emulated Prepared Statements...\n"); + pdo_mysql_errorinfo($db, 0); + + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + printf("Native Prepared Statements...\n"); + pdo_mysql_errorinfo($db, 20); + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_exec.phpt b/ext/pdo_mysql/tests/pdo_mysql_exec.phpt index 71d93815ff..c6f3d54ddd 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_exec.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_exec.phpt @@ -8,169 +8,169 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - function exec_and_count($offset, &$db, $sql, $exp = NULL) { - - try { - - $ret = $db->exec($sql); - if (!is_null($exp) && ($ret !== $exp)) { - printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", - $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - } catch (PDOException $e) { - printf("[%03d] '%s' has failed, [%s] %s\n", - $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return true; - } - - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - - /* affected rows related */ - try { - - exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); - exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); - exec_and_count(4, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); - exec_and_count(5, $db, "INSERT INTO test(id, col1) VALUES (2, 'b'), (3, 'c')", 2); - exec_and_count(6, $db, "UPDATE test SET id = 4 WHERE id = 3", 1); - exec_and_count(7, $db, "INSERT INTO test(id, col1) VALUES (1, 'd') ON DUPLICATE KEY UPDATE id = 3", 2); - exec_and_count(8, $db, "UPDATE test SET id = 5 WHERE id = 5", 0); - exec_and_count(9, $db, "INSERT INTO test(id, col1) VALUES (5, 'e') ON DUPLICATE KEY UPDATE id = 6", 1); - exec_and_count(10, $db, "REPLACE INTO test(id, col1) VALUES (5, 'f')", 2); - exec_and_count(11, $db, "REPLACE INTO test(id, col1) VALUES (6, 'g')", 1); - exec_and_count(12, $db, 'DELETE FROM test WHERE id > 2', 4); - exec_and_count(13, $db, 'DROP TABLE test', 0); - exec_and_count(14, $db, 'SET @myvar = 1', 0); - - exec_and_count(15, $db, 'THIS IS NOT VALID SQL, I HOPE', false); - printf("[016] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); - - exec_and_count(36, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); - exec_and_count(37, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); - // Results may vary. Typically you will get 1. But the MySQL 5.1 manual states: Truncation operations do not return the number of deleted rows. - // Don't rely on any return value! - exec_and_count(38, $db, 'TRUNCATE TABLE test', NULL); - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } - - - /* CREATE, DROP, CALL SP and SF */ - if (MySQLPDOTest::getServerVersion($db) > 50000) { - // let's try to play with stored procedures - try { - $ignore_exception = true; - exec_and_count(18, $db, 'DROP PROCEDURE IF EXISTS p', 0); - exec_and_count(19, $db, 'CREATE PROCEDURE p(OUT ver_param VARCHAR(255)) BEGIN SELECT VERSION() INTO ver_param; END;', 0); - // we got this far without problems. If there's an issue from now on, its a failure - $ignore_exception = false; - exec_and_count(20, $db, 'CALL p(@version)', 1); - $stmt = $db->query('SELECT @version AS p_version'); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (count($tmp) > 1 || !isset($tmp[0]['p_version'])) { - printf("[022] Data seems wrong, dumping\n"); - var_dump($tmp); - } else { - $p_version = $tmp[0]['p_version']; - } - - $stmt = $db->query('SELECT VERSION() AS _version'); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (count($tmp) > 1 || !isset($tmp[0]['_version'])) { - printf("[023] Data seems wrong, dumping\n"); - var_dump($tmp); - } else { - if ($p_version !== $tmp[0]['_version']) { - printf("[024] Found different version strings, SP returned '%s'/%s, SELECT returned '%s'/%s\n", - $p_version, gettype($p_version), - $tmp[0]['_version'], gettype($tmp[0]['_version'])); - } - } - exec_and_count(25, $db, 'DROP PROCEDURE IF EXISTS p', 0); - - } catch (PDOException $e) { - // ignore it, we might not have sufficient permissions - if (!$ignore_exception) - printf("[021] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } - - // stored function - try { - $ignore_exception = true; - exec_and_count(27, $db, 'DROP FUNCTION IF EXISTS f', 0); - exec_and_count(28, $db, 'CREATE FUNCTION f( ver_param VARCHAR(255)) RETURNS VARCHAR(255) DETERMINISTIC RETURN ver_param;', 0); - // we got this far without problems. If there's an issue from now on, its a failure - $ignore_exception = false; - $stmt = $db->query('SELECT f(VERSION()) AS f_version'); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (count($tmp) > 1 || !isset($tmp[0]['f_version'])) { - printf("[029] Data seems wrong, dumping\n"); - var_dump($tmp); - } else { - $f_version = $tmp[0]['f_version']; - } - $stmt = $db->query('SELECT VERSION() AS _version'); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (count($tmp) > 1 || !isset($tmp[0]['_version'])) { - printf("[030] Data seems wrong, dumping\n"); - var_dump($tmp); - } else { - if ($f_version !== $tmp[0]['_version']) { - printf("[031] Found different version strings, SF returned '%s'/%s, SELECT returned '%s'/%s\n", - $f_version, gettype($f_version), - $tmp[0]['_version'], gettype($tmp[0]['_version'])); - } - } - exec_and_count(32, $db, 'DROP FUNCTION IF EXISTS f', 0); - - } catch (PDOException $e) { - // ignore it, we might not have sufficient permissions - if (!$ignore_exception) - printf("[026] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } - } - - // multi query - try { - - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - $exp = 0; - - $tmp = @$db->exec(sprintf('DROP TABLE IF EXISTS test; CREATE TABLE test(id INT) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - if ($exp !== $tmp) - printf("[034] Expecting %s/%s got %s/%s, [%s] %s\n", - $exp, gettype($exp), - $tmp, gettype($tmp), - $db->errorCode(), var_export($db->errorInfo(), true)); - - // this is interesting: if we get sort of affected rows, what will happen now? - $tmp = @$db->exec('INSERT INTO test(id) VALUES (1); INSERT INTO test(id) VALUES (2)'); - printf("[035] With emulated PS it works but makes no sense given that exec() returns sort of affected rows...\n"); - - - } catch (PDOException $e) { - printf("[033] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - - print "done!"; + function exec_and_count($offset, &$db, $sql, $exp = NULL) { + + try { + + $ret = $db->exec($sql); + if (!is_null($exp) && ($ret !== $exp)) { + printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", + $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + } catch (PDOException $e) { + printf("[%03d] '%s' has failed, [%s] %s\n", + $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return true; + } + + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + + /* affected rows related */ + try { + + exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); + exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); + exec_and_count(4, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); + exec_and_count(5, $db, "INSERT INTO test(id, col1) VALUES (2, 'b'), (3, 'c')", 2); + exec_and_count(6, $db, "UPDATE test SET id = 4 WHERE id = 3", 1); + exec_and_count(7, $db, "INSERT INTO test(id, col1) VALUES (1, 'd') ON DUPLICATE KEY UPDATE id = 3", 2); + exec_and_count(8, $db, "UPDATE test SET id = 5 WHERE id = 5", 0); + exec_and_count(9, $db, "INSERT INTO test(id, col1) VALUES (5, 'e') ON DUPLICATE KEY UPDATE id = 6", 1); + exec_and_count(10, $db, "REPLACE INTO test(id, col1) VALUES (5, 'f')", 2); + exec_and_count(11, $db, "REPLACE INTO test(id, col1) VALUES (6, 'g')", 1); + exec_and_count(12, $db, 'DELETE FROM test WHERE id > 2', 4); + exec_and_count(13, $db, 'DROP TABLE test', 0); + exec_and_count(14, $db, 'SET @myvar = 1', 0); + + exec_and_count(15, $db, 'THIS IS NOT VALID SQL, I HOPE', false); + printf("[016] [%s] %s\n", $db->errorCode(), implode(' ', $db->errorInfo())); + + exec_and_count(36, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); + exec_and_count(37, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); + // Results may vary. Typically you will get 1. But the MySQL 5.1 manual states: Truncation operations do not return the number of deleted rows. + // Don't rely on any return value! + exec_and_count(38, $db, 'TRUNCATE TABLE test', NULL); + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } + + + /* CREATE, DROP, CALL SP and SF */ + if (MySQLPDOTest::getServerVersion($db) > 50000) { + // let's try to play with stored procedures + try { + $ignore_exception = true; + exec_and_count(18, $db, 'DROP PROCEDURE IF EXISTS p', 0); + exec_and_count(19, $db, 'CREATE PROCEDURE p(OUT ver_param VARCHAR(255)) BEGIN SELECT VERSION() INTO ver_param; END;', 0); + // we got this far without problems. If there's an issue from now on, its a failure + $ignore_exception = false; + exec_and_count(20, $db, 'CALL p(@version)', 1); + $stmt = $db->query('SELECT @version AS p_version'); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (count($tmp) > 1 || !isset($tmp[0]['p_version'])) { + printf("[022] Data seems wrong, dumping\n"); + var_dump($tmp); + } else { + $p_version = $tmp[0]['p_version']; + } + + $stmt = $db->query('SELECT VERSION() AS _version'); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (count($tmp) > 1 || !isset($tmp[0]['_version'])) { + printf("[023] Data seems wrong, dumping\n"); + var_dump($tmp); + } else { + if ($p_version !== $tmp[0]['_version']) { + printf("[024] Found different version strings, SP returned '%s'/%s, SELECT returned '%s'/%s\n", + $p_version, gettype($p_version), + $tmp[0]['_version'], gettype($tmp[0]['_version'])); + } + } + exec_and_count(25, $db, 'DROP PROCEDURE IF EXISTS p', 0); + + } catch (PDOException $e) { + // ignore it, we might not have sufficient permissions + if (!$ignore_exception) + printf("[021] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } + + // stored function + try { + $ignore_exception = true; + exec_and_count(27, $db, 'DROP FUNCTION IF EXISTS f', 0); + exec_and_count(28, $db, 'CREATE FUNCTION f( ver_param VARCHAR(255)) RETURNS VARCHAR(255) DETERMINISTIC RETURN ver_param;', 0); + // we got this far without problems. If there's an issue from now on, its a failure + $ignore_exception = false; + $stmt = $db->query('SELECT f(VERSION()) AS f_version'); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (count($tmp) > 1 || !isset($tmp[0]['f_version'])) { + printf("[029] Data seems wrong, dumping\n"); + var_dump($tmp); + } else { + $f_version = $tmp[0]['f_version']; + } + $stmt = $db->query('SELECT VERSION() AS _version'); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (count($tmp) > 1 || !isset($tmp[0]['_version'])) { + printf("[030] Data seems wrong, dumping\n"); + var_dump($tmp); + } else { + if ($f_version !== $tmp[0]['_version']) { + printf("[031] Found different version strings, SF returned '%s'/%s, SELECT returned '%s'/%s\n", + $f_version, gettype($f_version), + $tmp[0]['_version'], gettype($tmp[0]['_version'])); + } + } + exec_and_count(32, $db, 'DROP FUNCTION IF EXISTS f', 0); + + } catch (PDOException $e) { + // ignore it, we might not have sufficient permissions + if (!$ignore_exception) + printf("[026] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } + } + + // multi query + try { + + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + $exp = 0; + + $tmp = @$db->exec(sprintf('DROP TABLE IF EXISTS test; CREATE TABLE test(id INT) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + if ($exp !== $tmp) + printf("[034] Expecting %s/%s got %s/%s, [%s] %s\n", + $exp, gettype($exp), + $tmp, gettype($tmp), + $db->errorCode(), var_export($db->errorInfo(), true)); + + // this is interesting: if we get sort of affected rows, what will happen now? + $tmp = @$db->exec('INSERT INTO test(id) VALUES (1); INSERT INTO test(id) VALUES (2)'); + printf("[035] With emulated PS it works but makes no sense given that exec() returns sort of affected rows...\n"); + + + } catch (PDOException $e) { + printf("[033] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_exec_ddl.phpt b/ext/pdo_mysql/tests/pdo_mysql_exec_ddl.phpt index 0b2428cc1c..53d36af4ff 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_exec_ddl.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_exec_ddl.phpt @@ -8,75 +8,75 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - function exec_and_count($offset, &$db, $sql, $exp, $suppress_warning = false) { + function exec_and_count($offset, &$db, $sql, $exp, $suppress_warning = false) { - try { + try { - if ($suppress_warning) - $ret = @$db->exec($sql); - else - $ret = $db->exec($sql); + if ($suppress_warning) + $ret = @$db->exec($sql); + else + $ret = $db->exec($sql); - if ($ret !== $exp) { - printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", - $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } + if ($ret !== $exp) { + printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", + $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } - } catch (PDOException $e) { - printf("[%03d] '%s' has failed, [%s] %s\n", - $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } + } catch (PDOException $e) { + printf("[%03d] '%s' has failed, [%s] %s\n", + $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } - return true; - } + return true; + } - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - /* affected rows related */ - try { + /* affected rows related */ + try { - @$db->exec('DROP DATABASE IF EXISTS pdo_exec_ddl'); - @$db->exec('DROP DATABASE IF EXISTS pdo_exec_ddl2'); - if (1 === @$db->exec('CREATE DATABASE pdo_exec_ddl')) { - // yippie - we can create databases etc. - exec_and_count(3, $db, 'ALTER DATABASE pdo_exec_ddl CHARACTER SET latin1', 1); - } + @$db->exec('DROP DATABASE IF EXISTS pdo_exec_ddl'); + @$db->exec('DROP DATABASE IF EXISTS pdo_exec_ddl2'); + if (1 === @$db->exec('CREATE DATABASE pdo_exec_ddl')) { + // yippie - we can create databases etc. + exec_and_count(3, $db, 'ALTER DATABASE pdo_exec_ddl CHARACTER SET latin1', 1); + } - exec_and_count(4, $db, 'DROP TABLE IF EXISTS pdo_exec_ddl', 0); - exec_and_count(5, $db, 'DROP TABLE IF EXISTS pdo_exec_ddl2', 0); - if (0 === $db->exec('CREATE TABLE pdo_exec_ddl(id INT, col1 CHAR(2))')) { - exec_and_count(5, $db, 'CREATE INDEX idx1 ON pdo_exec_ddl(id)', 0); - exec_and_count(6, $db, 'DROP INDEX idx1 ON pdo_exec_ddl', 0); - exec_and_count(7, $db, 'ALTER TABLE pdo_exec_ddl DROP id', 0); - exec_and_count(8, $db, 'ALTER TABLE pdo_exec_ddl ADD id INT', 0); - exec_and_count(9, $db, 'ALTER TABLE pdo_exec_ddl ALTER id SET DEFAULT 1', 0); - exec_and_count(10, $db, 'RENAME TABLE pdo_exec_ddl TO pdo_exec_ddl2', 0); - } + exec_and_count(4, $db, 'DROP TABLE IF EXISTS pdo_exec_ddl', 0); + exec_and_count(5, $db, 'DROP TABLE IF EXISTS pdo_exec_ddl2', 0); + if (0 === $db->exec('CREATE TABLE pdo_exec_ddl(id INT, col1 CHAR(2))')) { + exec_and_count(5, $db, 'CREATE INDEX idx1 ON pdo_exec_ddl(id)', 0); + exec_and_count(6, $db, 'DROP INDEX idx1 ON pdo_exec_ddl', 0); + exec_and_count(7, $db, 'ALTER TABLE pdo_exec_ddl DROP id', 0); + exec_and_count(8, $db, 'ALTER TABLE pdo_exec_ddl ADD id INT', 0); + exec_and_count(9, $db, 'ALTER TABLE pdo_exec_ddl ALTER id SET DEFAULT 1', 0); + exec_and_count(10, $db, 'RENAME TABLE pdo_exec_ddl TO pdo_exec_ddl2', 0); + } - /* - 11.1.2. ALTER LOGFILE GROUP Syntax - 11.1.3. ALTER SERVER Syntax - 11.1.5. ALTER TABLESPACE Syntax - 11.1.8. CREATE LOGFILE GROUP Syntax - 11.1.9. CREATE SERVER Syntax - 11.1.11. CREATE TABLESPACE Syntax - 11.1.14. DROP LOGFILE GROUP Syntax - 11.1.15. DROP SERVER Syntax - 11.1.17. DROP TABLESPACE Syntax - */ + /* + 11.1.2. ALTER LOGFILE GROUP Syntax + 11.1.3. ALTER SERVER Syntax + 11.1.5. ALTER TABLESPACE Syntax + 11.1.8. CREATE LOGFILE GROUP Syntax + 11.1.9. CREATE SERVER Syntax + 11.1.11. CREATE TABLESPACE Syntax + 11.1.14. DROP LOGFILE GROUP Syntax + 11.1.15. DROP SERVER Syntax + 11.1.17. DROP TABLESPACE Syntax + */ - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; --CLEAN-- <?php require __DIR__ . '/mysql_pdo_test.inc'; diff --git a/ext/pdo_mysql/tests/pdo_mysql_exec_load_data.phpt b/ext/pdo_mysql/tests/pdo_mysql_exec_load_data.phpt index 50b35618b3..4e3f40d369 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_exec_load_data.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_exec_load_data.phpt @@ -30,85 +30,85 @@ if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { ?> --FILE-- <?php - function exec_and_count($offset, &$db, $sql, $exp) { - - try { - - $ret = $db->exec($sql); - if ($ret !== $exp) { - printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", - $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - } catch (PDOException $e) { - - if (42000 == $db->errorCode()) { - // Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND) - // Load data infile not allowed - return false; - } - - printf("[%03d] '%s' has failed, [%s] %s\n", - $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return true; - } - - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - putenv('PDOTEST_ATTR='.serialize([PDO::MYSQL_ATTR_LOCAL_INFILE=>true])); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - - /* affected rows related */ - try { - - exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); - exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); - - $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); - if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { - $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; - } else { - $filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; - } - - $fp = fopen($filename, "w"); - fwrite($fp, "1;foo\n"); - fwrite($fp, "2;bar"); - fclose($fp); - - $sql = sprintf("LOAD DATA LOCAL INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename)); - - if (exec_and_count(4, $db, $sql, 2)) { - - $stmt = $db->query('SELECT id, col1 FROM test ORDER BY id ASC'); - $expected = array(array("id" => 1, "col1" => "foo"), array("id" => 2, "col1" => "bar")); - $ret = $stmt->fetchAll(PDO::FETCH_ASSOC); - foreach ($expected as $offset => $exp) { - foreach ($exp as $key => $value) { - if ($ret[$offset][$key] != $value) { - printf("Results seem wrong, check manually\n"); - var_dump($ret); - var_dump($expected); - break 2; - } - } - } - } - - unlink($filename); - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + function exec_and_count($offset, &$db, $sql, $exp) { + + try { + + $ret = $db->exec($sql); + if ($ret !== $exp) { + printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", + $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + } catch (PDOException $e) { + + if (42000 == $db->errorCode()) { + // Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND) + // Load data infile not allowed + return false; + } + + printf("[%03d] '%s' has failed, [%s] %s\n", + $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return true; + } + + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + putenv('PDOTEST_ATTR='.serialize([PDO::MYSQL_ATTR_LOCAL_INFILE=>true])); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + + /* affected rows related */ + try { + + exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); + exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); + + $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); + if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { + $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; + } else { + $filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; + } + + $fp = fopen($filename, "w"); + fwrite($fp, "1;foo\n"); + fwrite($fp, "2;bar"); + fclose($fp); + + $sql = sprintf("LOAD DATA LOCAL INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename)); + + if (exec_and_count(4, $db, $sql, 2)) { + + $stmt = $db->query('SELECT id, col1 FROM test ORDER BY id ASC'); + $expected = array(array("id" => 1, "col1" => "foo"), array("id" => 2, "col1" => "bar")); + $ret = $stmt->fetchAll(PDO::FETCH_ASSOC); + foreach ($expected as $offset => $exp) { + foreach ($exp as $key => $value) { + if ($ret[$offset][$key] != $value) { + printf("Results seem wrong, check manually\n"); + var_dump($ret); + var_dump($expected); + break 2; + } + } + } + } + + unlink($filename); + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_exec_select.phpt b/ext/pdo_mysql/tests/pdo_mysql_exec_select.phpt index 901a4ad9a8..2cff2e3915 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_exec_select.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_exec_select.phpt @@ -8,50 +8,50 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - function exec_and_count($offset, &$db, $sql, $exp) { + function exec_and_count($offset, &$db, $sql, $exp) { - try { + try { - $ret = $db->exec($sql); - if ($ret !== $exp) { - printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", - $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } + $ret = $db->exec($sql); + if ($ret !== $exp) { + printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", + $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } - } catch (PDOException $e) { - printf("[%03d] '%s' has failed, [%s] %s\n", - $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } + } catch (PDOException $e) { + printf("[%03d] '%s' has failed, [%s] %s\n", + $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } - return true; - } + return true; + } - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - /* affected rows related */ - try { + /* affected rows related */ + try { - exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); - exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); - exec_and_count(4, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); - // question is: will the result set be cleaned up, will it be possible to run more queries on the line? - // buffered or unbuffered does not matter! - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - exec_and_count(5, $db, 'SELECT id FROM test', 0); - exec_and_count(6, $db, "INSERT INTO test(id, col1) VALUES (2, 'b')", 1); + exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); + exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); + exec_and_count(4, $db, "INSERT INTO test(id, col1) VALUES (1, 'a')", 1); + // question is: will the result set be cleaned up, will it be possible to run more queries on the line? + // buffered or unbuffered does not matter! + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + exec_and_count(5, $db, 'SELECT id FROM test', 0); + exec_and_count(6, $db, "INSERT INTO test(id, col1) VALUES (2, 'b')", 1); - } catch (PDOException $e) { - printf("[001] %s, [%s] %s\n", - $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s, [%s] %s\n", + $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_fetch_both.phpt b/ext/pdo_mysql/tests/pdo_mysql_fetch_both.phpt index 31b2bd5d75..fb20dff5bc 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_fetch_both.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_fetch_both.phpt @@ -9,54 +9,54 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - function fetch($offset, &$db, $query, $expect = null) { + function fetch($offset, &$db, $query, $expect = null) { - try { - $stmt = $db->query('SELECT 1'); - $num = $stmt->fetch(PDO::FETCH_NUM); + try { + $stmt = $db->query('SELECT 1'); + $num = $stmt->fetch(PDO::FETCH_NUM); - $stmt = $db->query('SELECT 1'); - $assoc = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt = $db->query('SELECT 1'); + $assoc = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt = $db->query('SELECT 1'); - $both = $stmt->fetch(PDO::FETCH_BOTH); + $stmt = $db->query('SELECT 1'); + $both = $stmt->fetch(PDO::FETCH_BOTH); - $computed_both = array_merge($num, $assoc); - if ($computed_both != $both) { - printf("[%03d] Suspicious FETCH_BOTH result, dumping\n", $offset); - var_dump($computed_both); - var_dump($both); - } + $computed_both = array_merge($num, $assoc); + if ($computed_both != $both) { + printf("[%03d] Suspicious FETCH_BOTH result, dumping\n", $offset); + var_dump($computed_both); + var_dump($both); + } - if (!is_null($expect) && ($expect != $both)) { - printf("[%03d] Expected differs from returned data, dumping\n", $offset); - var_dump($expect); - var_dump($both); - } + if (!is_null($expect) && ($expect != $both)) { + printf("[%03d] Expected differs from returned data, dumping\n", $offset); + var_dump($expect); + var_dump($both); + } - } catch (PDOException $e) { + } catch (PDOException $e) { - printf("[%03d] %s, [%s] %s\n", - $offset, - $e->getMessage(), $db->errroCode(), implode(' ', $db->errorInfo())); + printf("[%03d] %s, [%s] %s\n", + $offset, + $e->getMessage(), $db->errroCode(), implode(' ', $db->errorInfo())); - } + } - } + } - try { + try { - fetch(2, $db, 'SELECT 1', array(0 => '1', '1' => '1')); + fetch(2, $db, 'SELECT 1', array(0 => '1', '1' => '1')); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt index 51310faa9e..386dfb1e1e 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_get_attribute.phpt @@ -11,60 +11,60 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - - function set_and_get($offset, $db, $attribute, $value) { - - $value_type = gettype($value); - try { - - if (!$db->setAttribute($attribute, $value)) { - printf("[%03d] Cannot set attribute '%s' to value '%s'\n", - $offset, $attribute, var_export($tmp, true)); - return false; - } - - if (gettype($value) != $value_type) { - printf("[%03d] Call to PDO::setAttribute(int attribute, mixed value) has changed the type of value from %s to %s, test will not work properly\n", - $offset, $value_type, gettype($value)); - return false; - } - - $tmp = $db->getAttribute($attribute); - if ($tmp !== $value) { - printf("[%03d] Attribute '%s' was set to '%s'/%s but getAttribute() reports '%s'/%s\n", - $offset, $attribute, var_export($value, true), gettype($value), var_export($tmp, true), gettype($tmp)); - return false; - } - - } catch (PDOException $e) { - printf("[%03d] %s, [%s] %s\n", - $offset, $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return true; - } - - set_and_get(1, $db, PDO::ATTR_AUTOCOMMIT, 1); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + + function set_and_get($offset, $db, $attribute, $value) { + + $value_type = gettype($value); + try { + + if (!$db->setAttribute($attribute, $value)) { + printf("[%03d] Cannot set attribute '%s' to value '%s'\n", + $offset, $attribute, var_export($tmp, true)); + return false; + } + + if (gettype($value) != $value_type) { + printf("[%03d] Call to PDO::setAttribute(int attribute, mixed value) has changed the type of value from %s to %s, test will not work properly\n", + $offset, $value_type, gettype($value)); + return false; + } + + $tmp = $db->getAttribute($attribute); + if ($tmp !== $value) { + printf("[%03d] Attribute '%s' was set to '%s'/%s but getAttribute() reports '%s'/%s\n", + $offset, $attribute, var_export($value, true), gettype($value), var_export($tmp, true), gettype($tmp)); + return false; + } + + } catch (PDOException $e) { + printf("[%03d] %s, [%s] %s\n", + $offset, $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return true; + } + + set_and_get(1, $db, PDO::ATTR_AUTOCOMMIT, 1); /* - set_and_get(2, $db, PDO::ATTR_AUTOCOMMIT, 0); - set_and_get(3, $db, PDO::ATTR_AUTOCOMMIT, -1); - $obj = new stdClass(); - set_and_get(4, $db, PDO::ATTR_AUTOCOMMIT, $obj); + set_and_get(2, $db, PDO::ATTR_AUTOCOMMIT, 0); + set_and_get(3, $db, PDO::ATTR_AUTOCOMMIT, -1); + $obj = new stdClass(); + set_and_get(4, $db, PDO::ATTR_AUTOCOMMIT, $obj); - set_and_get(5, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, 1); - set_and_get(6, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, 0); - set_and_get(7, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, -1); - $tmp = array(); - set_and_get(8, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, $tmp); + set_and_get(5, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, 1); + set_and_get(6, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, 0); + set_and_get(7, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, -1); + $tmp = array(); + set_and_get(8, $db, PDO::MYSQL_ATTR_LOCAL_INFILE, $tmp); - set_and_get(9, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, ''); - set_and_get(10, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, 'SOME SQL'); - set_and_get(11, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, -1); + set_and_get(9, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, ''); + set_and_get(10, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, 'SOME SQL'); + set_and_get(11, $db, PPDO::MYSQL_ATTR_INIT_COMMAND, -1); */ /* @@ -87,7 +87,7 @@ PDO::ATTR_CONNECTION_STATUS PDO::ATTR_SERVER_INFO */ - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_interface.phpt b/ext/pdo_mysql/tests/pdo_mysql_interface.phpt index cc949b265d..fbf0938dc9 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_interface.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_interface.phpt @@ -11,48 +11,48 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $expected = array( - '__construct' => true, - 'prepare' => true, - 'beginTransaction' => true, - 'commit' => true, - 'rollBack' => true, - 'setAttribute' => true, - 'exec' => true, - 'query' => true, - 'lastInsertId' => true, - 'errorCode' => true, - 'errorInfo' => true, - 'getAttribute' => true, - 'quote' => true, - 'inTransaction' => true, - 'getAvailableDrivers' => true, - ); - $classname = get_class($db); + $expected = array( + '__construct' => true, + 'prepare' => true, + 'beginTransaction' => true, + 'commit' => true, + 'rollBack' => true, + 'setAttribute' => true, + 'exec' => true, + 'query' => true, + 'lastInsertId' => true, + 'errorCode' => true, + 'errorInfo' => true, + 'getAttribute' => true, + 'quote' => true, + 'inTransaction' => true, + 'getAvailableDrivers' => true, + ); + $classname = get_class($db); - $methods = get_class_methods($classname); - foreach ($methods as $k => $method) { - if (isset($expected[$method])) { - unset($expected[$method]); - unset($methods[$k]); - } - if ($method == $classname) { - unset($expected['__construct']); - unset($methods[$k]); - } - } - if (!empty($expected)) { - printf("Dumping missing class methods\n"); - var_dump($expected); - } - if (!empty($methods)) { - printf("Found more methods than expected, dumping list\n"); - var_dump($methods); - } + $methods = get_class_methods($classname); + foreach ($methods as $k => $method) { + if (isset($expected[$method])) { + unset($expected[$method]); + unset($methods[$k]); + } + if ($method == $classname) { + unset($expected['__construct']); + unset($methods[$k]); + } + } + if (!empty($expected)) { + printf("Dumping missing class methods\n"); + var_dump($expected); + } + if (!empty($methods)) { + printf("Found more methods than expected, dumping list\n"); + var_dump($methods); + } - print "done!"; + print "done!"; --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_last_insert_id.phpt b/ext/pdo_mysql/tests/pdo_mysql_last_insert_id.phpt index d9dec0bcd3..b63ecb2c52 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_last_insert_id.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_last_insert_id.phpt @@ -9,106 +9,106 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - try { - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[001] No query has been run, lastInsertId() should return '0'/string got '%s'/%s\n", - var_export($tmp, true), gettype($tmp)); - - if ('0' !== ($tmp = $db->lastInsertId('sequence_name'))) - printf("[002] MySQL does not support sequences, expecting '0'/string got '%s'/%s\n", - var_export($tmp, true), gettype($tmp)); - - $db->exec('DROP TABLE IF EXISTS test'); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[003] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - $db->exec(sprintf('CREATE TABLE test(id INT, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[004] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - $stmt = $db->query('SELECT id FROM test LIMIT 1'); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[005] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - // no auto increment column - $db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')"); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[006] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - $db->exec('ALTER TABLE test MODIFY id INT AUTO_INCREMENT PRIMARY KEY'); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[006] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - // duplicate key - @$db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')"); - if ('0' !== ($tmp = $db->lastInsertId())) - printf("[007] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - $db->exec("INSERT INTO test(id, col1) VALUES (101, 'b')"); - if ('101' !== ($tmp = $db->lastInsertId())) - printf("[008] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); - - $db->exec('ALTER TABLE test MODIFY col1 CHAR(10) UNIQUE'); - // replace = delete + insert -> new auto increment value - $db->exec("REPLACE INTO test(col1) VALUES ('b')"); - $next_id = (int)$db->lastInsertId(); - - if ($next_id <= 101) - printf("[009] Expecting at least 102, got %d\n",$next_id); - - $stmt = $db->query('SELECT LAST_INSERT_ID() as _last_id'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $last_id = $row['_last_id']; - if ($next_id != $last_id) { - printf("[010] LAST_INSERT_ID() = %d and lastInserId() = %d differ\n", - $last_id, $next_id); - } - - $db->exec("INSERT INTO test(col1) VALUES ('c'), ('d'), ('e')"); - $next_id = (int)$db->lastInsertId(); - if ($next_id <= $last_id) - printf("[011] Expecting at least %d, got %d\n", $last_id + 1, $next_id); - - // warnings are unhandy, lets go for exceptions for a second - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - try { - $ignore_exception = true; - $db->exec('LOCK TABLE test WRITE'); - $ignore_exception = false; - - if (MySQLPDOTest::getServerVersion($db) >= 50000) { - $stmt = $db->query('SELECT @@auto_increment_increment AS inc'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $inc = $row['inc']; - } else { - $inc = 1; - } - - $stmt = $db->query('SELECT LAST_INSERT_ID() as _last_id'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $last_id = $row['_last_id']; - - $db->exec("INSERT INTO test(col1) VALUES ('z')"); - $next_id = (int)$db->lastInsertId(); - if ($next_id < ($last_id + $inc)) - printf("[012] Expecting at least %d, got %d\n", $last_id + $inc, $next_id); - - } catch (PDOException $e) { - if (!$ignore_exception) - printf("[014] %s, [%s} %s\n", $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); - @$db->exec('UNLOCK TABLE test'); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + try { + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[001] No query has been run, lastInsertId() should return '0'/string got '%s'/%s\n", + var_export($tmp, true), gettype($tmp)); + + if ('0' !== ($tmp = $db->lastInsertId('sequence_name'))) + printf("[002] MySQL does not support sequences, expecting '0'/string got '%s'/%s\n", + var_export($tmp, true), gettype($tmp)); + + $db->exec('DROP TABLE IF EXISTS test'); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[003] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + $db->exec(sprintf('CREATE TABLE test(id INT, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[004] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + $stmt = $db->query('SELECT id FROM test LIMIT 1'); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[005] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + // no auto increment column + $db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')"); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[006] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + $db->exec('ALTER TABLE test MODIFY id INT AUTO_INCREMENT PRIMARY KEY'); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[006] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + // duplicate key + @$db->exec("INSERT INTO test(id, col1) VALUES (100, 'a')"); + if ('0' !== ($tmp = $db->lastInsertId())) + printf("[007] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + $db->exec("INSERT INTO test(id, col1) VALUES (101, 'b')"); + if ('101' !== ($tmp = $db->lastInsertId())) + printf("[008] Expecting '0'/string got '%s'/%s", var_export($tmp, true), gettype($tmp)); + + $db->exec('ALTER TABLE test MODIFY col1 CHAR(10) UNIQUE'); + // replace = delete + insert -> new auto increment value + $db->exec("REPLACE INTO test(col1) VALUES ('b')"); + $next_id = (int)$db->lastInsertId(); + + if ($next_id <= 101) + printf("[009] Expecting at least 102, got %d\n",$next_id); + + $stmt = $db->query('SELECT LAST_INSERT_ID() as _last_id'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $last_id = $row['_last_id']; + if ($next_id != $last_id) { + printf("[010] LAST_INSERT_ID() = %d and lastInserId() = %d differ\n", + $last_id, $next_id); + } + + $db->exec("INSERT INTO test(col1) VALUES ('c'), ('d'), ('e')"); + $next_id = (int)$db->lastInsertId(); + if ($next_id <= $last_id) + printf("[011] Expecting at least %d, got %d\n", $last_id + 1, $next_id); + + // warnings are unhandy, lets go for exceptions for a second + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + try { + $ignore_exception = true; + $db->exec('LOCK TABLE test WRITE'); + $ignore_exception = false; + + if (MySQLPDOTest::getServerVersion($db) >= 50000) { + $stmt = $db->query('SELECT @@auto_increment_increment AS inc'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $inc = $row['inc']; + } else { + $inc = 1; + } + + $stmt = $db->query('SELECT LAST_INSERT_ID() as _last_id'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $last_id = $row['_last_id']; + + $db->exec("INSERT INTO test(col1) VALUES ('z')"); + $next_id = (int)$db->lastInsertId(); + if ($next_id < ($last_id + $inc)) + printf("[012] Expecting at least %d, got %d\n", $last_id + $inc, $next_id); + + } catch (PDOException $e) { + if (!$ignore_exception) + printf("[014] %s, [%s} %s\n", $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING); + @$db->exec('UNLOCK TABLE test'); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt b/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt index f520c1d828..74ab7858d4 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_multi_stmt_nextrowset.phpt @@ -21,65 +21,65 @@ if (!MySQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - MySQLPDOTest::createTestTable($db); + MySQLPDOTest::createTestTable($db); - function test_proc($db) { + function test_proc($db) { - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p() BEGIN SELECT id FROM test ORDER BY id ASC LIMIT 3; SELECT id, label FROM test WHERE id < 4 ORDER BY id DESC LIMIT 3; END;'); - $stmt = $db->query('CALL p()'); - do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } while ($stmt->nextRowSet()); - var_dump($stmt->nextRowSet()); + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p() BEGIN SELECT id FROM test ORDER BY id ASC LIMIT 3; SELECT id, label FROM test WHERE id < 4 ORDER BY id DESC LIMIT 3; END;'); + $stmt = $db->query('CALL p()'); + do { + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + } while ($stmt->nextRowSet()); + var_dump($stmt->nextRowSet()); - } + } - try { + try { - // Using native PS for proc, since emulated fails. - printf("Native PS...\n"); - foreach (array(false, true) as $multi) { - $value = $multi ? 'true' : 'false'; - echo "\nTesting with PDO::MYSQL_ATTR_MULTI_STATEMENTS set to {$value}\n"; - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => $multi)); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - test_proc($db); + // Using native PS for proc, since emulated fails. + printf("Native PS...\n"); + foreach (array(false, true) as $multi) { + $value = $multi ? 'true' : 'false'; + echo "\nTesting with PDO::MYSQL_ATTR_MULTI_STATEMENTS set to {$value}\n"; + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => $multi)); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + test_proc($db); - $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => $multi)); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_MULTI_STATEMENTS => $multi)); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - test_proc($db); + test_proc($db); - // Switch back to emulated prepares to verify multi statement attribute. - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - // This will fail when $multi is false. - $stmt = $db->query("SELECT * FROM test; INSERT INTO test (id, label) VALUES (99, 'x')"); - if ($stmt !== false) { - $stmt->closeCursor(); - } - $info = $db->errorInfo(); - var_dump($info[0]); - } - @$db->exec('DROP PROCEDURE IF EXISTS p'); + // Switch back to emulated prepares to verify multi statement attribute. + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + // This will fail when $multi is false. + $stmt = $db->query("SELECT * FROM test; INSERT INTO test (id, label) VALUES (99, 'x')"); + if ($stmt !== false) { + $stmt->closeCursor(); + } + $info = $db->errorInfo(); + var_dump($info[0]); + } + @$db->exec('DROP PROCEDURE IF EXISTS p'); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_param_str_natl.phpt b/ext/pdo_mysql/tests/pdo_mysql_param_str_natl.phpt index 01964c0cd9..a45259f0e0 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_param_str_natl.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_param_str_natl.phpt @@ -23,7 +23,7 @@ $stmt->execute(); var_dump($db->query('SELECT * from test')); foreach ($db->query('SELECT * from test') as $row) { - print_r($row); + print_r($row); } ?> diff --git a/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt b/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt index 3656e71a0c..4d95c73cdc 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_pconnect.phpt @@ -8,92 +8,92 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - try { - - $dsn = MySQLPDOTest::getDSN(); - $user = PDO_MYSQL_TEST_USER; - $pass = PDO_MYSQL_TEST_PASS; - - $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); - $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); - $db1->exec('SET @pdo_persistent_connection=1'); - $stmt = $db2->query('SELECT @pdo_persistent_connection as _pers'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - if ($tmp['_pers'] !== '1') - printf("[001] Both handles should use the same connection."); - - $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $con1 = $tmp['_con1']; - - $stmt = $db2->query('SELECT CONNECTION_ID() as _con2'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $con2 = $tmp['_con2']; - - if ($con1 !== $con2) - printf("[002] Both handles should report the same MySQL thread ID"); - - $db1 = NULL; /* should be equal to closing to my understanding */ - $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); - $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $con1 = $tmp['_con1']; - - if ($con1 !== $con2) - printf("[003] Both handles should report the same MySQL thread ID"); - - $affected = $db1->exec(sprintf('KILL %d', $con1)); - // Server needs some think-time sometimes - sleep(1); - if ('00000' == $db1->errorCode()) { - // looks like KILL has worked ? Or not... TODO: why no warning with libmysql?! - @$db1->exec("SET @pdo_persistent_connection=2"); - // but now I want to see some error... - if ('HY000' != $db1->errorCode()) - printf("[004] Wrong error code %s\n", $db1->errorCode()); - - $tmp = implode(' ', $db1->errorInfo()); - if (!strstr($tmp, '2006')) - printf("[005] Wrong error info %s\n", $tmp); - } - - $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => false)); - $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $con1 = $tmp['_con1']; - - @$db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); - $stmt = $db2->query('SELECT CONNECTION_ID() as _con2'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - $con2 = $tmp['_con2']; - - if ($con1 == $con2) - printf("[006] Looks like the persistent and the non persistent connection are using the same link?!\n"); - - // lets go crazy and create a few pconnections... - $connections = array(); - for ($i = 0; $i <= 20; $i++) { - $connections[$i] = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); - } - do { - $i = mt_rand(0, 20); - if (isset($connections[$i])) - unset($connections[$i]); - } while (!empty($connections)); - - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s [%s] %s\n", - $e->getMessage(), - (is_object($db1)) ? $db1->errorCode() : 'n/a', - (is_object($db1)) ? implode(' ', $db1->errorInfo()) : 'n/a', - (is_object($db2)) ? $db2->errorCode() : 'n/a', - (is_object($db2)) ? implode(' ', $db2->errorInfo()) : 'n/a'); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + try { + + $dsn = MySQLPDOTest::getDSN(); + $user = PDO_MYSQL_TEST_USER; + $pass = PDO_MYSQL_TEST_PASS; + + $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); + $db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); + $db1->exec('SET @pdo_persistent_connection=1'); + $stmt = $db2->query('SELECT @pdo_persistent_connection as _pers'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + if ($tmp['_pers'] !== '1') + printf("[001] Both handles should use the same connection."); + + $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $con1 = $tmp['_con1']; + + $stmt = $db2->query('SELECT CONNECTION_ID() as _con2'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $con2 = $tmp['_con2']; + + if ($con1 !== $con2) + printf("[002] Both handles should report the same MySQL thread ID"); + + $db1 = NULL; /* should be equal to closing to my understanding */ + $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); + $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $con1 = $tmp['_con1']; + + if ($con1 !== $con2) + printf("[003] Both handles should report the same MySQL thread ID"); + + $affected = $db1->exec(sprintf('KILL %d', $con1)); + // Server needs some think-time sometimes + sleep(1); + if ('00000' == $db1->errorCode()) { + // looks like KILL has worked ? Or not... TODO: why no warning with libmysql?! + @$db1->exec("SET @pdo_persistent_connection=2"); + // but now I want to see some error... + if ('HY000' != $db1->errorCode()) + printf("[004] Wrong error code %s\n", $db1->errorCode()); + + $tmp = implode(' ', $db1->errorInfo()); + if (!strstr($tmp, '2006')) + printf("[005] Wrong error info %s\n", $tmp); + } + + $db1 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => false)); + $stmt = $db1->query('SELECT CONNECTION_ID() as _con1'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $con1 = $tmp['_con1']; + + @$db2 = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); + $stmt = $db2->query('SELECT CONNECTION_ID() as _con2'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + $con2 = $tmp['_con2']; + + if ($con1 == $con2) + printf("[006] Looks like the persistent and the non persistent connection are using the same link?!\n"); + + // lets go crazy and create a few pconnections... + $connections = array(); + for ($i = 0; $i <= 20; $i++) { + $connections[$i] = new PDO($dsn, $user, $pass, array(PDO::ATTR_PERSISTENT => true)); + } + do { + $i = mt_rand(0, 20); + if (isset($connections[$i])) + unset($connections[$i]); + } while (!empty($connections)); + + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s [%s] %s\n", + $e->getMessage(), + (is_object($db1)) ? $db1->errorCode() : 'n/a', + (is_object($db1)) ? implode(' ', $db1->errorInfo()) : 'n/a', + (is_object($db2)) ? $db2->errorCode() : 'n/a', + (is_object($db2)) ? implode(' ', $db2->errorInfo()) : 'n/a'); + } + + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_phpinfo.phpt b/ext/pdo_mysql/tests/pdo_mysql_phpinfo.phpt index a230b3c19f..e44f1d2a52 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_phpinfo.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_phpinfo.phpt @@ -9,22 +9,22 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - ob_start(); - phpinfo(); - $tmp = ob_get_contents(); - ob_end_clean(); + ob_start(); + phpinfo(); + $tmp = ob_get_contents(); + ob_end_clean(); - /* PDO Driver for MySQL, client library version => 6.0.3-alpha */ - $reg = 'Client API version.*' . preg_quote($db->getAttribute(PDO::ATTR_CLIENT_VERSION), '/'); + /* PDO Driver for MySQL, client library version => 6.0.3-alpha */ + $reg = 'Client API version.*' . preg_quote($db->getAttribute(PDO::ATTR_CLIENT_VERSION), '/'); - if (!preg_match("/$reg/", $tmp)) { - printf("[001] Cannot find MySQL PDO driver line in phpinfo() output\n"); - } + if (!preg_match("/$reg/", $tmp)) { + printf("[001] Cannot find MySQL PDO driver line in phpinfo() output\n"); + } - print "done!"; + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated.phpt index 8db812ee19..6fe2ff20ba 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated.phpt @@ -9,314 +9,314 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - function prepex($offset, &$db, $query, $input_params = null, $error_info = null) { - - try { - - if (is_array($error_info) && isset($error_info['prepare'])) - $stmt = @$db->prepare($query); - else - $stmt = $db->prepare($query); - - if (is_array($error_info) && isset($error_info['prepare'])) { - $tmp = $db->errorInfo(); - - if (isset($error_info['prepare']['sqlstate']) && - ($error_info['prepare']['sqlstate'] !== $tmp[0])) { - printf("[%03d] prepare() - expecting SQLSTATE '%s' got '%s'\n", - $offset, $error_info['prepare']['sqlstate'], $tmp[0]); - return false; - } - - if (isset($error_info['prepare']['mysql']) && - ($error_info['prepare']['mysql'] !== $tmp[1])) { - printf("[%03d] prepare() - expecting MySQL Code '%s' got '%s'\n", - $offset, $error_info['prepare']['mysql'], $tmp[0]); - return false; - } - - return false; - } - - if (is_null($input_params)) - $input_params = array(); - - if (is_array($error_info) && isset($error_info['execute'])) - $ret = @$stmt->execute($input_params); - else - $ret = $stmt->execute($input_params); - - if (!is_bool($ret)) - printf("[%03d] PDO::execute() should return a boolean value, got %s/%s\n", - var_export($ret, true), $ret); - - if (is_array($error_info) && isset($error_info['execute'])) { - $tmp = $stmt->errorInfo(); - - if (isset($error_info['execute']['sqlstate']) && - ($error_info['execute']['sqlstate'] !== $tmp[0])) { - printf("[%03d] execute() - expecting SQLSTATE '%s' got '%s'\n", - $offset, $error_info['execute']['sqlstate'], $tmp[0]); - return false; - } - - if (isset($error_info['execute']['mysql']) && - ($error_info['execute']['mysql'] !== $tmp[1])) { - printf("[%03d] execute() - expecting MySQL Code '%s' got '%s'\n", - $offset, $error_info['execute']['mysql'], $tmp[0]); - return false; - } - - return false; - } - - } catch (PDOException $e) { - printf("[%03d] %s, [%s} %s\n", - $offset, $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return $stmt; - } - - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to switch to emulated prepared statements, test will fail\n"); - - // TODO - that's PDO - you can prepare empty statements! - prepex(3, $db, '', - array(), array('execute' => array('sqlstate' => '42000'))); - - // lets be fair and do the most simple SELECT first - $stmt = prepex(4, $db, 'SELECT 1 as "one"'); - var_dump($stmt->fetch(PDO::FETCH_ASSOC)); - - prepex(5, $db, 'DROP TABLE IF EXISTS test'); - prepex(6, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - prepex(7, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')"); - $stmt = prepex(8, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - prepex(9, $db, 'DELETE FROM test'); - prepex(10, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')", - array(':placeholder' => 'first row')); - $stmt = prepex(11, $db, 'SELECT label FROM test'); - - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - prepex(12, $db, 'DELETE FROM test'); - prepex(13, $db, 'INSERT INTO test(id, label) VALUES(1, :placeholder)', - array(':placeholder' => 'first row')); - prepex(14, $db, 'INSERT INTO test(id, label) VALUES(2, :placeholder)', - array(':placeholder' => 'second row')); - $stmt = prepex(15, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // Is PDO fun? - prepex(16, $db, 'SELECT label FROM test WHERE :placeholder > 1', - array(':placeholder' => 'id')); - prepex(17, $db, 'SELECT :placeholder FROM test WHERE id > 1', - array(':placeholder' => 'id')); - prepex(18, $db, 'SELECT :placeholder FROM test WHERE :placeholder > :placeholder', - array(':placeholder' => 'test')); - - for ($num_params = 2; $num_params < 100; $num_params++) { - $params = array(':placeholder' => 'a'); - for ($i = 1; $i < $num_params; $i++) { - $params[str_repeat('a', $i)] = 'some data'; - } - prepex(19, $db, 'SELECT id, label FROM test WHERE label > :placeholder', - $params, array('execute' => array('sqlstate' => 'HY093'))); - } - - prepex(20, $db, 'DELETE FROM test'); - prepex(21, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder), (2, :placeholder)', - array(':placeholder' => 'row')); - $stmt = prepex(22, $db, 'SELECT id, label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - $stmt = prepex(23, $db, 'SELECT id, label FROM test WHERE :placeholder IS NOT NULL', - array(':placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[024] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); - - $stmt = prepex(25, $db, 'SELECT id, label FROM test WHERE :placeholder IS NULL', - array(':placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[026] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); - - prepex(27, $db, 'DROP TABLE IF EXISTS test'); - prepex(28, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); - if (is_object(prepex(29, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)'))) { - prepex(30, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', - array(':placeholder' => 'MySQL is the best database in the world!')); - prepex(31, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', - array(':placeholder' => 'If I have the freedom to choose, I would always go again for the MySQL Server')); - $stmt = prepex(32, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'mysql')); - /* - Lets ignore this - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[033] Expecting two rows, got %d rows\n", $tmp); - */ - } - prepex(34, $db, 'DELETE FROM test'); - prepex(35, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder), (2, :placeholder)', - array(':placeholder' => 'row')); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + function prepex($offset, &$db, $query, $input_params = null, $error_info = null) { + + try { + + if (is_array($error_info) && isset($error_info['prepare'])) + $stmt = @$db->prepare($query); + else + $stmt = $db->prepare($query); + + if (is_array($error_info) && isset($error_info['prepare'])) { + $tmp = $db->errorInfo(); + + if (isset($error_info['prepare']['sqlstate']) && + ($error_info['prepare']['sqlstate'] !== $tmp[0])) { + printf("[%03d] prepare() - expecting SQLSTATE '%s' got '%s'\n", + $offset, $error_info['prepare']['sqlstate'], $tmp[0]); + return false; + } + + if (isset($error_info['prepare']['mysql']) && + ($error_info['prepare']['mysql'] !== $tmp[1])) { + printf("[%03d] prepare() - expecting MySQL Code '%s' got '%s'\n", + $offset, $error_info['prepare']['mysql'], $tmp[0]); + return false; + } + + return false; + } + + if (is_null($input_params)) + $input_params = array(); + + if (is_array($error_info) && isset($error_info['execute'])) + $ret = @$stmt->execute($input_params); + else + $ret = $stmt->execute($input_params); + + if (!is_bool($ret)) + printf("[%03d] PDO::execute() should return a boolean value, got %s/%s\n", + var_export($ret, true), $ret); + + if (is_array($error_info) && isset($error_info['execute'])) { + $tmp = $stmt->errorInfo(); + + if (isset($error_info['execute']['sqlstate']) && + ($error_info['execute']['sqlstate'] !== $tmp[0])) { + printf("[%03d] execute() - expecting SQLSTATE '%s' got '%s'\n", + $offset, $error_info['execute']['sqlstate'], $tmp[0]); + return false; + } + + if (isset($error_info['execute']['mysql']) && + ($error_info['execute']['mysql'] !== $tmp[1])) { + printf("[%03d] execute() - expecting MySQL Code '%s' got '%s'\n", + $offset, $error_info['execute']['mysql'], $tmp[0]); + return false; + } + + return false; + } + + } catch (PDOException $e) { + printf("[%03d] %s, [%s} %s\n", + $offset, $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return $stmt; + } + + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to switch to emulated prepared statements, test will fail\n"); + + // TODO - that's PDO - you can prepare empty statements! + prepex(3, $db, '', + array(), array('execute' => array('sqlstate' => '42000'))); + + // lets be fair and do the most simple SELECT first + $stmt = prepex(4, $db, 'SELECT 1 as "one"'); + var_dump($stmt->fetch(PDO::FETCH_ASSOC)); + + prepex(5, $db, 'DROP TABLE IF EXISTS test'); + prepex(6, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + prepex(7, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')"); + $stmt = prepex(8, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + prepex(9, $db, 'DELETE FROM test'); + prepex(10, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')", + array(':placeholder' => 'first row')); + $stmt = prepex(11, $db, 'SELECT label FROM test'); + + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + prepex(12, $db, 'DELETE FROM test'); + prepex(13, $db, 'INSERT INTO test(id, label) VALUES(1, :placeholder)', + array(':placeholder' => 'first row')); + prepex(14, $db, 'INSERT INTO test(id, label) VALUES(2, :placeholder)', + array(':placeholder' => 'second row')); + $stmt = prepex(15, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // Is PDO fun? + prepex(16, $db, 'SELECT label FROM test WHERE :placeholder > 1', + array(':placeholder' => 'id')); + prepex(17, $db, 'SELECT :placeholder FROM test WHERE id > 1', + array(':placeholder' => 'id')); + prepex(18, $db, 'SELECT :placeholder FROM test WHERE :placeholder > :placeholder', + array(':placeholder' => 'test')); + + for ($num_params = 2; $num_params < 100; $num_params++) { + $params = array(':placeholder' => 'a'); + for ($i = 1; $i < $num_params; $i++) { + $params[str_repeat('a', $i)] = 'some data'; + } + prepex(19, $db, 'SELECT id, label FROM test WHERE label > :placeholder', + $params, array('execute' => array('sqlstate' => 'HY093'))); + } + + prepex(20, $db, 'DELETE FROM test'); + prepex(21, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder), (2, :placeholder)', + array(':placeholder' => 'row')); + $stmt = prepex(22, $db, 'SELECT id, label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + $stmt = prepex(23, $db, 'SELECT id, label FROM test WHERE :placeholder IS NOT NULL', + array(':placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[024] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); + + $stmt = prepex(25, $db, 'SELECT id, label FROM test WHERE :placeholder IS NULL', + array(':placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[026] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); + + prepex(27, $db, 'DROP TABLE IF EXISTS test'); + prepex(28, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); + if (is_object(prepex(29, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)'))) { + prepex(30, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', + array(':placeholder' => 'MySQL is the best database in the world!')); + prepex(31, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', + array(':placeholder' => 'If I have the freedom to choose, I would always go again for the MySQL Server')); + $stmt = prepex(32, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'mysql')); + /* + Lets ignore this + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[033] Expecting two rows, got %d rows\n", $tmp); + */ + } + prepex(34, $db, 'DELETE FROM test'); + prepex(35, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder), (2, :placeholder)', + array(':placeholder' => 'row')); /* - $stmt = prepex(36, $db, 'SELECT id, label FROM "test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'row'), - array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); + $stmt = prepex(36, $db, 'SELECT id, label FROM "test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'row'), + array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); */ - $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'row'), - array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); - - $stmt = prepex(38, $db, 'SELECT id, label AS "label" FROM test WHERE label = :placeholder', - array(':placeholder' => 'row')); - - $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = :placeholder)", - $db->quote('%ro%')); - $stmt = prepex(39, $db, $sql, array('placeholder' => -1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[040] Expecting zero rows, got %d rows\n", $tmp); - - - $sql = sprintf("SELECT id, label FROM test WHERE (id = :placeholder) OR (label LIKE %s)", - $db->quote('%ro%')); - $stmt = prepex(41, $db, $sql, array('placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[042] Expecting two rows, got %d rows\n", $tmp); - - $sql = "SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = :placeholder)"; - $stmt = prepex(43, $db, $sql, array('placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) - printf("[044] Expecting onw row, got %d rows\n", $tmp); - - // and now, the same with anonymous placeholders... - prepex(45, $db, 'DROP TABLE IF EXISTS test'); - prepex(46, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - prepex(47, $db, "INSERT INTO test(id, label) VALUES(1, '?')"); - $stmt = prepex(48, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - prepex(49, $db, 'DELETE FROM test'); - prepex(50, $db, "INSERT INTO test(id, label) VALUES(1, '?')", - array('first row')); - $stmt = prepex(51, $db, 'SELECT label FROM test'); - - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - prepex(52, $db, 'DELETE FROM test'); - prepex(53, $db, 'INSERT INTO test(id, label) VALUES(1, ?)', - array('first row')); - prepex(54, $db, 'INSERT INTO test(id, label) VALUES(2, ?)', - array('second row')); - $stmt = prepex(55, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // Is PDO fun? - prepex(56, $db, 'SELECT label FROM test WHERE ? > 1', - array('id')); - prepex(57, $db, 'SELECT ? FROM test WHERE id > 1', - array('id')); - prepex(58, $db, 'SELECT ? FROM test WHERE ? > ?', - array('test'), array('execute' => array('sqlstate' => 'HY093'))); - - prepex(59, $db, 'SELECT ? FROM test WHERE ? > ?', - array('id', 'label', 'value')); - - for ($num_params = 2; $num_params < 100; $num_params++) { - $params = array('a'); - for ($i = 1; $i < $num_params; $i++) { - $params[] = 'some data'; - } - prepex(60, $db, 'SELECT id, label FROM test WHERE label > ?', - $params, array('execute' => array('sqlstate' => 'HY093'))); - } - - prepex(61, $db, 'DELETE FROM test'); - prepex(62, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', - array('row', 'row')); - $stmt = prepex(63, $db, 'SELECT id, label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - $stmt = prepex(64, $db, 'SELECT id, label FROM test WHERE ? IS NOT NULL', - array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[065] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); - - $stmt = prepex(66, $db, 'SELECT id, label FROM test WHERE ? IS NULL', - array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[067] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); - - prepex(68, $db, 'DROP TABLE IF EXISTS test'); - prepex(69, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); - if (is_object(prepex(70, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)'))) { - prepex(71, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', - array('MySQL is the best database in the world!')); - prepex(72, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', - array('If I have the freedom to choose, I would always go again for the MySQL Server')); - $stmt = prepex(73, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (?)', - array('mysql')); - /* - Lets ignore that - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[074] Expecting two rows, got %d rows\n", $tmp); - */ - } - - prepex(74, $db, 'DELETE FROM test'); - prepex(75, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', - array('row', 'row')); - - $stmt = prepex(76, $db, 'SELECT id, label FROM "test WHERE MATCH label AGAINST (?)', - array('row'), - array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); - - /* - TODO enable after fix - $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'row'), - array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); - */ - - $stmt = prepex(78, $db, 'SELECT id, label AS "label" FROM test WHERE label = ?', - array('row')); - - $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = ?)", - $db->quote('%ro%')); - $stmt = prepex(79, $db, $sql, array(-1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[080] Expecting zero rows, got %d rows\n", $tmp); - - - $sql = sprintf("SELECT id, label FROM test WHERE (id = ?) OR (label LIKE %s)", - $db->quote('%ro%')); - $stmt = prepex(81, $db, $sql, array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[082] Expecting two rows, got %d rows\n", $tmp); - - $sql = "SELECT id, label FROM test WHERE id = ? AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; - $stmt = prepex(83, $db, $sql, array(1, 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) - printf("[084] Expecting one row, got %d rows\n", $tmp); - - $sql = "SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; - $stmt = prepex(85, $db, $sql, array(1, 1), array('execute' => array('sqlstate' => 'HY093'))); - if (is_object($stmt) && count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[086] Expecting no rows, got %d rows\n", $tmp); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'row'), + array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); + + $stmt = prepex(38, $db, 'SELECT id, label AS "label" FROM test WHERE label = :placeholder', + array(':placeholder' => 'row')); + + $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = :placeholder)", + $db->quote('%ro%')); + $stmt = prepex(39, $db, $sql, array('placeholder' => -1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[040] Expecting zero rows, got %d rows\n", $tmp); + + + $sql = sprintf("SELECT id, label FROM test WHERE (id = :placeholder) OR (label LIKE %s)", + $db->quote('%ro%')); + $stmt = prepex(41, $db, $sql, array('placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[042] Expecting two rows, got %d rows\n", $tmp); + + $sql = "SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = :placeholder)"; + $stmt = prepex(43, $db, $sql, array('placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) + printf("[044] Expecting onw row, got %d rows\n", $tmp); + + // and now, the same with anonymous placeholders... + prepex(45, $db, 'DROP TABLE IF EXISTS test'); + prepex(46, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + prepex(47, $db, "INSERT INTO test(id, label) VALUES(1, '?')"); + $stmt = prepex(48, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + prepex(49, $db, 'DELETE FROM test'); + prepex(50, $db, "INSERT INTO test(id, label) VALUES(1, '?')", + array('first row')); + $stmt = prepex(51, $db, 'SELECT label FROM test'); + + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + prepex(52, $db, 'DELETE FROM test'); + prepex(53, $db, 'INSERT INTO test(id, label) VALUES(1, ?)', + array('first row')); + prepex(54, $db, 'INSERT INTO test(id, label) VALUES(2, ?)', + array('second row')); + $stmt = prepex(55, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // Is PDO fun? + prepex(56, $db, 'SELECT label FROM test WHERE ? > 1', + array('id')); + prepex(57, $db, 'SELECT ? FROM test WHERE id > 1', + array('id')); + prepex(58, $db, 'SELECT ? FROM test WHERE ? > ?', + array('test'), array('execute' => array('sqlstate' => 'HY093'))); + + prepex(59, $db, 'SELECT ? FROM test WHERE ? > ?', + array('id', 'label', 'value')); + + for ($num_params = 2; $num_params < 100; $num_params++) { + $params = array('a'); + for ($i = 1; $i < $num_params; $i++) { + $params[] = 'some data'; + } + prepex(60, $db, 'SELECT id, label FROM test WHERE label > ?', + $params, array('execute' => array('sqlstate' => 'HY093'))); + } + + prepex(61, $db, 'DELETE FROM test'); + prepex(62, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', + array('row', 'row')); + $stmt = prepex(63, $db, 'SELECT id, label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + $stmt = prepex(64, $db, 'SELECT id, label FROM test WHERE ? IS NOT NULL', + array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[065] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); + + $stmt = prepex(66, $db, 'SELECT id, label FROM test WHERE ? IS NULL', + array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[067] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); + + prepex(68, $db, 'DROP TABLE IF EXISTS test'); + prepex(69, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); + if (is_object(prepex(70, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)'))) { + prepex(71, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', + array('MySQL is the best database in the world!')); + prepex(72, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', + array('If I have the freedom to choose, I would always go again for the MySQL Server')); + $stmt = prepex(73, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (?)', + array('mysql')); + /* + Lets ignore that + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[074] Expecting two rows, got %d rows\n", $tmp); + */ + } + + prepex(74, $db, 'DELETE FROM test'); + prepex(75, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', + array('row', 'row')); + + $stmt = prepex(76, $db, 'SELECT id, label FROM "test WHERE MATCH label AGAINST (?)', + array('row'), + array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); + + /* + TODO enable after fix + $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'row'), + array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); + */ + + $stmt = prepex(78, $db, 'SELECT id, label AS "label" FROM test WHERE label = ?', + array('row')); + + $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = ?)", + $db->quote('%ro%')); + $stmt = prepex(79, $db, $sql, array(-1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[080] Expecting zero rows, got %d rows\n", $tmp); + + + $sql = sprintf("SELECT id, label FROM test WHERE (id = ?) OR (label LIKE %s)", + $db->quote('%ro%')); + $stmt = prepex(81, $db, $sql, array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[082] Expecting two rows, got %d rows\n", $tmp); + + $sql = "SELECT id, label FROM test WHERE id = ? AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; + $stmt = prepex(83, $db, $sql, array(1, 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) + printf("[084] Expecting one row, got %d rows\n", $tmp); + + $sql = "SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; + $stmt = prepex(85, $db, $sql, array(1, 1), array('execute' => array('sqlstate' => 'HY093'))); + if (is_object($stmt) && count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[086] Expecting no rows, got %d rows\n", $tmp); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_anonymous.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_anonymous.phpt index e8b5cb39ae..abd2615ce8 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_anonymous.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_anonymous.phpt @@ -9,54 +9,54 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to switch to emulated prepared statements, test will fail\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to switch to emulated prepared statements, test will fail\n"); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(1, '?')"); - // you can bind as many values as you want no matter if they can be replaced or not - $stmt->execute(array('first row')); - if ('00000' !== $stmt->errorCode()) - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(1, '?')"); + // you can bind as many values as you want no matter if they can be replaced or not + $stmt->execute(array('first row')); + if ('00000' !== $stmt->errorCode()) + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - $stmt = $db->prepare('SELECT id, label FROM test'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // now the same with native PS - printf("now the same with native PS\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to switch off emulated prepared statements, test will fail\n"); + // now the same with native PS + printf("now the same with native PS\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to switch off emulated prepared statements, test will fail\n"); - $db->exec('DELETE FROM test'); - $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(1, '?')"); - // you can bind as many values as you want no matter if they can be replaced or not - $stmt->execute(array('first row')); - if ('00000' !== $stmt->errorCode()) - printf("[005] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + $db->exec('DELETE FROM test'); + $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(1, '?')"); + // you can bind as many values as you want no matter if they can be replaced or not + $stmt->execute(array('first row')); + if ('00000' !== $stmt->errorCode()) + printf("[005] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - $stmt = $db->prepare('SELECT id, label FROM test'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_placeholder_everywhere.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_placeholder_everywhere.phpt index 5ad3c85641..e47b03b999 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_placeholder_everywhere.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_emulated_placeholder_everywhere.phpt @@ -9,50 +9,50 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { - // native PS - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to switch off emulated prepared statements, test will fail\n"); + try { + // native PS + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to switch off emulated prepared statements, test will fail\n"); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); - // So, what will happen? More placeholder but values and - // placeholders in interesting places... - $stmt = $db->prepare('SELECT ? FROM test WHERE ? > ?'); - $stmt->execute(array('test')); - if ('00000' !== $stmt->errorCode()) { - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - } - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + // So, what will happen? More placeholder but values and + // placeholders in interesting places... + $stmt = $db->prepare('SELECT ? FROM test WHERE ? > ?'); + $stmt->execute(array('test')); + if ('00000' !== $stmt->errorCode()) { + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + } + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // now the same with emulated PS - printf("now the same with emulated PS\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to switch on emulated prepared statements, test will fail\n"); + // now the same with emulated PS + printf("now the same with emulated PS\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to switch on emulated prepared statements, test will fail\n"); - $stmt = $db->prepare('SELECT ? FROM test WHERE ? > ?'); - $stmt->execute(array('test')); - if ('00000' !== $stmt->errorCode()) - printf("[005] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT ? FROM test WHERE ? > ?'); + $stmt->execute(array('test')); + if ('00000' !== $stmt->errorCode()) + printf("[005] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_load_data.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_load_data.phpt index 0e7dc4b3ab..c76a7460c9 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_load_data.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_load_data.phpt @@ -30,89 +30,89 @@ if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { ?> --FILE-- <?php - function exec_and_count($offset, &$db, $sql, $exp) { - - try { - - $ret = $db->exec($sql); - if ($ret !== $exp) { - printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", - $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - } catch (PDOException $e) { - - if (42000 == $db->errorCode()) { - // Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND) - // Load data infile not allowed - return false; - } - - printf("[%03d] '%s' has failed, [%s] %s\n", - $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return true; - } - - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - // Run with native PS. - // The test is about checking the fallback to emulation - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - - /* affected rows related */ - try { - - exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); - exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); - - $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); - if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { - $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; - } else { - $filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; - } - - $fp = fopen($filename, "w"); - fwrite($fp, "1;foo\n"); - fwrite($fp, "2;bar"); - fclose($fp); - - // This should fail, the PS protocol should not support it. - // mysqlnd will give 2014 as a follow-up of the fallback logic - // libmysql will give a little more precise 2030 error code - // However, you get an error and the big question is what happens to the line - $stmt = $db->prepare(sprintf("LOAD DATA INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename))); - if (!$stmt->execute()) { - printf("[004] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - } - - // Check the line - $stmt = $db->query("SELECT 1 as 'one'"); - if ($stmt->errorCode() != '0000') { - printf("[005] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - } else { - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (!isset($rows[0]['one']) || $rows[0]['one'] != 1) - printf("[006] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - } - - unlink($filename); - - } catch (PDOException $e) { - printf("[001] %s, [%s] %s (%s)\n", - $e->getMessage(), - $db->errorCode(), - implode(' ', $db->errorInfo()), - (isset($stmt)) ? implode(' ', $stmt->errorInfo()) : 'N/A'); - } - - print "done!"; + function exec_and_count($offset, &$db, $sql, $exp) { + + try { + + $ret = $db->exec($sql); + if ($ret !== $exp) { + printf("[%03d] Expecting '%s'/%s got '%s'/%s when running '%s', [%s] %s\n", + $offset, $exp, gettype($exp), $ret, gettype($ret), $sql, + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + } catch (PDOException $e) { + + if (42000 == $db->errorCode()) { + // Error: 1148 SQLSTATE: 42000 (ER_NOT_ALLOWED_COMMAND) + // Load data infile not allowed + return false; + } + + printf("[%03d] '%s' has failed, [%s] %s\n", + $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return true; + } + + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + // Run with native PS. + // The test is about checking the fallback to emulation + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + + /* affected rows related */ + try { + + exec_and_count(2, $db, 'DROP TABLE IF EXISTS test', 0); + exec_and_count(3, $db, sprintf('CREATE TABLE test(id INT NOT NULL PRIMARY KEY, col1 CHAR(10)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE), 0); + + $stmt = $db->query("SHOW VARIABLES LIKE 'secure_file_priv'"); + if (($row = $stmt->fetch(PDO::FETCH_ASSOC)) && ($row['value'] != '')) { + $filename = $row['value'] . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; + } else { + $filename = MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . "pdo_mysql_exec_load_data.csv"; + } + + $fp = fopen($filename, "w"); + fwrite($fp, "1;foo\n"); + fwrite($fp, "2;bar"); + fclose($fp); + + // This should fail, the PS protocol should not support it. + // mysqlnd will give 2014 as a follow-up of the fallback logic + // libmysql will give a little more precise 2030 error code + // However, you get an error and the big question is what happens to the line + $stmt = $db->prepare(sprintf("LOAD DATA INFILE %s INTO TABLE test FIELDS TERMINATED BY ';' LINES TERMINATED BY '\n'", $db->quote($filename))); + if (!$stmt->execute()) { + printf("[004] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + } + + // Check the line + $stmt = $db->query("SELECT 1 as 'one'"); + if ($stmt->errorCode() != '0000') { + printf("[005] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + } else { + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (!isset($rows[0]['one']) || $rows[0]['one'] != 1) + printf("[006] [%d] %s\n", $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + } + + unlink($filename); + + } catch (PDOException $e) { + printf("[001] %s, [%s] %s (%s)\n", + $e->getMessage(), + $db->errorCode(), + implode(' ', $db->errorInfo()), + (isset($stmt)) ? implode(' ', $stmt->errorInfo()) : 'N/A'); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_match_against.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_match_against.phpt index f77c420d67..9c5b953a52 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_match_against.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_match_against.phpt @@ -8,35 +8,35 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { + try { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); - $db->exec('CREATE FULLTEXT INDEX idx1 ON test(label)'); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); + $db->exec('CREATE FULLTEXT INDEX idx1 ON test(label)'); - $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)'); - $stmt->execute(array(':placeholder' => 'row')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)'); + $stmt->execute(array(':placeholder' => 'row')); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)'); - $stmt->execute(array('placeholder' => 'row')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)'); + $stmt->execute(array('placeholder' => 'row')); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (?)'); - $stmt->execute(array('row')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE MATCH label AGAINST (?)'); + $stmt->execute(array('row')); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } catch (PDOException $e) { + } catch (PDOException $e) { - printf("[001] %s, [%s} %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + printf("[001] %s, [%s} %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native.phpt index efd472edc6..5ea3e94c1e 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native.phpt @@ -9,331 +9,331 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - function prepex($offset, &$db, $query, $input_params = null, $error_info = null, $suppress_warning = false) { + function prepex($offset, &$db, $query, $input_params = null, $error_info = null, $suppress_warning = false) { - try { + try { - if ($suppress_warning || (is_array($error_info) && isset($error_info['prepare']))) - $stmt = @$db->prepare($query); - else - $stmt = $db->prepare($query); + if ($suppress_warning || (is_array($error_info) && isset($error_info['prepare']))) + $stmt = @$db->prepare($query); + else + $stmt = $db->prepare($query); - if (is_array($error_info) && isset($error_info['prepare'])) { - $tmp = $db->errorInfo(); + if (is_array($error_info) && isset($error_info['prepare'])) { + $tmp = $db->errorInfo(); - if (isset($error_info['prepare']['sqlstate']) && - ($error_info['prepare']['sqlstate'] !== $tmp[0])) { - printf("[%03d] prepare() - expecting SQLSTATE '%s' got '%s'\n", - $offset, $error_info['prepare']['sqlstate'], $tmp[0]); - return false; - } + if (isset($error_info['prepare']['sqlstate']) && + ($error_info['prepare']['sqlstate'] !== $tmp[0])) { + printf("[%03d] prepare() - expecting SQLSTATE '%s' got '%s'\n", + $offset, $error_info['prepare']['sqlstate'], $tmp[0]); + return false; + } - if (isset($error_info['prepare']['mysql']) && - ($error_info['prepare']['mysql'] !== $tmp[1])) { - printf("[%03d] prepare() - expecting MySQL Code '%s' got '%s'\n", - $offset, $error_info['prepare']['mysql'], $tmp[0]); - return false; - } + if (isset($error_info['prepare']['mysql']) && + ($error_info['prepare']['mysql'] !== $tmp[1])) { + printf("[%03d] prepare() - expecting MySQL Code '%s' got '%s'\n", + $offset, $error_info['prepare']['mysql'], $tmp[0]); + return false; + } - return false; - } + return false; + } - if (!is_object($stmt)) - return false; + if (!is_object($stmt)) + return false; - if (is_null($input_params)) - $input_params = array(); + if (is_null($input_params)) + $input_params = array(); // 5.0.18, 5.1.14 @ 15 // printf("[%03d]\n", $offset); - if ($suppress_warning || (is_array($error_info) && isset($error_info['execute']))) - $ret = @$stmt->execute($input_params); - else - $ret = $stmt->execute($input_params); - - if (!is_bool($ret)) - printf("[%03d] PDO::execute() should return a boolean value, got %s/%s\n", - var_export($ret, true), $ret); - - $tmp = $stmt->errorInfo(); - if (isset($tmp[1]) && ($tmp[1] == 2030)) { - // Trying to hack around MySQL Server version dependent features - // 2030 This command is not supported in the prepared statement protocol yet - return false; - } - - if (is_array($error_info) && isset($error_info['execute'])) { - - if (isset($error_info['execute']['sqlstate']) && - ($error_info['execute']['sqlstate'] !== $tmp[0])) { - printf("[%03d] execute() - expecting SQLSTATE '%s' got '%s'\n", - $offset, $error_info['execute']['sqlstate'], $tmp[0]); - return false; - } - - if (isset($error_info['execute']['mysql']) && - ($error_info['execute']['mysql'] !== $tmp[1])) { - printf("[%03d] execute() - expecting MySQL Code '%s' got '%s'\n", - $offset, $error_info['execute']['mysql'], $tmp[0]); - return false; - } - - return false; - - } - - } catch (PDOException $e) { - printf("[%03d] %s, [%s} %s\n", - $offset, $e->getMessage(), - $db->errorCode(), implode(' ', $db->errorInfo())); - return false; - } - - return $stmt; - } - - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); - - // TODO - that's PDO - you can prepare empty statements! - prepex(3, $db, '', - array(), array('prepare' => array('sqlstate' => '42000'))); - - // lets be fair and do the most simple SELECT first - $stmt = prepex(4, $db, 'SELECT 1 as "one"'); - if (MySQLPDOTest::isPDOMySQLnd()) - // native types - int - $expected = array('one' => 1); - else - // always strings, like STRINGIFY flag - $expected = array('one' => '1'); - - $row = $stmt->fetch(PDO::FETCH_ASSOC); - if ($row !== $expected) { - printf("[004a] Expecting %s got %s\n", var_export($expected, true), var_export($row, true)); - } - - prepex(5, $db, 'DROP TABLE IF EXISTS test'); - prepex(6, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - prepex(7, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')"); - $stmt = prepex(8, $db, 'SELECT label FROM test ORDER BY id ASC'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - prepex(9, $db, 'DELETE FROM test'); - prepex(10, $db, 'INSERT INTO test(id, label) VALUES(1, :placeholder)', - array(':placeholder' => 'first row')); - prepex(11, $db, 'INSERT INTO test(id, label) VALUES(2, :placeholder)', - array(':placeholder' => 'second row')); - $stmt = prepex(12, $db, 'SELECT label FROM test ORDER BY id ASC'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // Is PDO fun? - $stmt = prepex(13, $db, 'SELECT label FROM test WHERE :placeholder > 1', - array(':placeholder' => 'id')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - for ($num_params = 2; $num_params < 100; $num_params++) { - $params = array(':placeholder' => 'a'); - for ($i = 1; $i < $num_params; $i++) { - $params[str_repeat('a', $i)] = 'some data'; - } - prepex(16, $db, 'SELECT id, label FROM test WHERE label > :placeholder', - $params, array('execute' => array('sqlstate' => 'HY093'))); - } - - $stmt = prepex(16, $db, 'SELECT id, label FROM test WHERE :placeholder IS NOT NULL', - array(':placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[017] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); - - $stmt = prepex(18, $db, 'SELECT id, label FROM test WHERE :placeholder IS NULL', - array(':placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[019] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); - - prepex(20, $db, 'DROP TABLE IF EXISTS test'); - prepex(21, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); - // Not every MySQL Server version supports this - if (is_object(prepex(22, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)', null, null, true))) { - prepex(23, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', - array(':placeholder' => 'MySQL is the best database in the world!')); - prepex(24, $db, 'INSERT INTO test(id, label) VALUES (2, :placeholder)', - array(':placeholder' => 'If I have the freedom to choose, I would always go again for the MySQL Server')); - $stmt = prepex(25, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'mysql'), null, true); - if (is_object($stmt)) { - /* - Lets ignore this - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[033] Expecting two rows, got %d rows\n", $tmp); - */ - $stmt = prepex(26, $db, 'SELECT id, label FROM test ORDER BY id ASC'); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[027] Expecting two rows, got %d rows\n", $tmp); - - if ($tmp[0]['label'] !== 'MySQL is the best database in the world!') { - printf("[028] INSERT seems to have failed, dumping data, check manually\n"); - var_dump($tmp); - } - } - } - - $db->exec('DELETE FROM test'); - $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); - $db->exec("INSERT INTO test(id, label) VALUES (2, 'row2')"); - - $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = :placeholder)", - $db->quote('%ro%')); - $stmt = prepex(29, $db, $sql, array('placeholder' => -1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[030] Expecting zero rows, got %d rows\n", $tmp); - - $sql = sprintf("SELECT id, label FROM test WHERE (id = :placeholder) OR (label LIKE %s)", - $db->quote('%go%')); - $stmt = prepex(31, $db, $sql, array('placeholder' => 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) - printf("[032] Expecting one row, got %d rows\n", $tmp); - - // and now, the same with anonymous placeholders... - prepex(33, $db, 'DROP TABLE IF EXISTS test'); - prepex(34, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - prepex(35, $db, "INSERT INTO test(id, label) VALUES(1, '?')"); - $stmt = prepex(36, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - prepex(37, $db, 'DELETE FROM test'); - prepex(38, $db, 'INSERT INTO test(id, label) VALUES(1, ?)', - array('first row')); - prepex(39, $db, 'INSERT INTO test(id, label) VALUES(2, ?)', - array('second row')); - $stmt = prepex(40, $db, 'SELECT label FROM test'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // Is PDO fun? - prepex(40, $db, 'SELECT label FROM test WHERE ? > 1', - array('id')); - prepex(41, $db, 'SELECT ? FROM test WHERE id > 1', - array('id')); - prepex(42, $db, 'SELECT ? FROM test WHERE ? > ?', - array('id', 'label', 'value')); - - for ($num_params = 2; $num_params < 100; $num_params++) { - $params = array('a'); - for ($i = 1; $i < $num_params; $i++) { - $params[] = 'some data'; - } - prepex(43, $db, 'SELECT id, label FROM test WHERE label > ?', - $params, array('execute' => array('sqlstate' => 'HY093'))); - } - - prepex(44, $db, 'DELETE FROM test'); - prepex(45, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', - array('row', 'row')); - $stmt = prepex(46, $db, 'SELECT id, label FROM test ORDER BY id'); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - $exp = array( - 0 => array( - "id" => "1", - "label" => "row" - ), - 1 => array( - "id" => "2", - "label" => "row" - ), - ); - - if (MySQLPDOTest::isPDOMySQLnd()) { - // mysqlnd returns native types - $exp[0]['id'] = 1; - $exp[1]['id'] = 2; - } - if ($tmp !== $exp) { - printf("[064] Results seem wrong. Please check dumps manually.\n"); - var_dump($exp); - var_dump($tmp); - } - - $stmt = prepex(47, $db, 'SELECT id, label FROM test WHERE ? IS NOT NULL', - array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[048] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); - - $stmt = prepex(49, $db, 'SELECT id, label FROM test WHERE ? IS NULL', - array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[050] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); - - prepex(51, $db, 'DROP TABLE IF EXISTS test'); - prepex(52, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); - if (is_object(prepex(53, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)', null, null, true))) { - prepex(54, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', - array('MySQL is the best database in the world!')); - prepex(55, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', - array('If I have the freedom to choose, I would always go again for the MySQL Server')); - $stmt = prepex(56, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (?)', - array('mysql'), null, true); - /* - Lets ignore that - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[074] Expecting two rows, got %d rows\n", $tmp); - */ - } - - prepex(57, $db, 'DELETE FROM test'); - prepex(58, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', - array('row1', 'row2')); - - /* - TODO enable after fix - $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', - array(':placeholder' => 'row'), - array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); - */ - - $stmt = prepex(59, $db, 'SELECT id, label AS "label" FROM test WHERE label = ?', - array('row1')); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - $exp = array( - 0 => array("id" => "1", "label" => "row1") - ); - - if (MySQLPDOTest::isPDOMySQLnd()) { - // mysqlnd returns native types - $exp[0]['id'] = 1; - } - if ($tmp !== $exp) { - printf("[065] Results seem wrong. Please check dumps manually.\n"); - var_dump($exp); - var_dump($tmp); - } - - $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = ?)", - $db->quote('%ro%')); - $stmt = prepex(60, $db, $sql, array(-1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) - printf("[061] Expecting zero rows, got %d rows\n", $tmp); - - $sql = sprintf("SELECT id, label FROM test WHERE (id = ?) OR (label LIKE %s)", - $db->quote('%ro%')); - $stmt = prepex(61, $db, $sql, array(1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) - printf("[062] Expecting two rows, got %d rows\n", $tmp); - - $sql = "SELECT id, label FROM test WHERE id = ? AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; - $stmt = prepex(63, $db, $sql, array(1, 1)); - if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) - printf("[064] Expecting one row, got %d rows\n", $tmp); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + if ($suppress_warning || (is_array($error_info) && isset($error_info['execute']))) + $ret = @$stmt->execute($input_params); + else + $ret = $stmt->execute($input_params); + + if (!is_bool($ret)) + printf("[%03d] PDO::execute() should return a boolean value, got %s/%s\n", + var_export($ret, true), $ret); + + $tmp = $stmt->errorInfo(); + if (isset($tmp[1]) && ($tmp[1] == 2030)) { + // Trying to hack around MySQL Server version dependent features + // 2030 This command is not supported in the prepared statement protocol yet + return false; + } + + if (is_array($error_info) && isset($error_info['execute'])) { + + if (isset($error_info['execute']['sqlstate']) && + ($error_info['execute']['sqlstate'] !== $tmp[0])) { + printf("[%03d] execute() - expecting SQLSTATE '%s' got '%s'\n", + $offset, $error_info['execute']['sqlstate'], $tmp[0]); + return false; + } + + if (isset($error_info['execute']['mysql']) && + ($error_info['execute']['mysql'] !== $tmp[1])) { + printf("[%03d] execute() - expecting MySQL Code '%s' got '%s'\n", + $offset, $error_info['execute']['mysql'], $tmp[0]); + return false; + } + + return false; + + } + + } catch (PDOException $e) { + printf("[%03d] %s, [%s} %s\n", + $offset, $e->getMessage(), + $db->errorCode(), implode(' ', $db->errorInfo())); + return false; + } + + return $stmt; + } + + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); + + // TODO - that's PDO - you can prepare empty statements! + prepex(3, $db, '', + array(), array('prepare' => array('sqlstate' => '42000'))); + + // lets be fair and do the most simple SELECT first + $stmt = prepex(4, $db, 'SELECT 1 as "one"'); + if (MySQLPDOTest::isPDOMySQLnd()) + // native types - int + $expected = array('one' => 1); + else + // always strings, like STRINGIFY flag + $expected = array('one' => '1'); + + $row = $stmt->fetch(PDO::FETCH_ASSOC); + if ($row !== $expected) { + printf("[004a] Expecting %s got %s\n", var_export($expected, true), var_export($row, true)); + } + + prepex(5, $db, 'DROP TABLE IF EXISTS test'); + prepex(6, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + prepex(7, $db, "INSERT INTO test(id, label) VALUES(1, ':placeholder')"); + $stmt = prepex(8, $db, 'SELECT label FROM test ORDER BY id ASC'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + prepex(9, $db, 'DELETE FROM test'); + prepex(10, $db, 'INSERT INTO test(id, label) VALUES(1, :placeholder)', + array(':placeholder' => 'first row')); + prepex(11, $db, 'INSERT INTO test(id, label) VALUES(2, :placeholder)', + array(':placeholder' => 'second row')); + $stmt = prepex(12, $db, 'SELECT label FROM test ORDER BY id ASC'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // Is PDO fun? + $stmt = prepex(13, $db, 'SELECT label FROM test WHERE :placeholder > 1', + array(':placeholder' => 'id')); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + for ($num_params = 2; $num_params < 100; $num_params++) { + $params = array(':placeholder' => 'a'); + for ($i = 1; $i < $num_params; $i++) { + $params[str_repeat('a', $i)] = 'some data'; + } + prepex(16, $db, 'SELECT id, label FROM test WHERE label > :placeholder', + $params, array('execute' => array('sqlstate' => 'HY093'))); + } + + $stmt = prepex(16, $db, 'SELECT id, label FROM test WHERE :placeholder IS NOT NULL', + array(':placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[017] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); + + $stmt = prepex(18, $db, 'SELECT id, label FROM test WHERE :placeholder IS NULL', + array(':placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[019] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); + + prepex(20, $db, 'DROP TABLE IF EXISTS test'); + prepex(21, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); + // Not every MySQL Server version supports this + if (is_object(prepex(22, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)', null, null, true))) { + prepex(23, $db, 'INSERT INTO test(id, label) VALUES (1, :placeholder)', + array(':placeholder' => 'MySQL is the best database in the world!')); + prepex(24, $db, 'INSERT INTO test(id, label) VALUES (2, :placeholder)', + array(':placeholder' => 'If I have the freedom to choose, I would always go again for the MySQL Server')); + $stmt = prepex(25, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'mysql'), null, true); + if (is_object($stmt)) { + /* + Lets ignore this + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[033] Expecting two rows, got %d rows\n", $tmp); + */ + $stmt = prepex(26, $db, 'SELECT id, label FROM test ORDER BY id ASC'); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[027] Expecting two rows, got %d rows\n", $tmp); + + if ($tmp[0]['label'] !== 'MySQL is the best database in the world!') { + printf("[028] INSERT seems to have failed, dumping data, check manually\n"); + var_dump($tmp); + } + } + } + + $db->exec('DELETE FROM test'); + $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); + $db->exec("INSERT INTO test(id, label) VALUES (2, 'row2')"); + + $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = :placeholder)", + $db->quote('%ro%')); + $stmt = prepex(29, $db, $sql, array('placeholder' => -1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[030] Expecting zero rows, got %d rows\n", $tmp); + + $sql = sprintf("SELECT id, label FROM test WHERE (id = :placeholder) OR (label LIKE %s)", + $db->quote('%go%')); + $stmt = prepex(31, $db, $sql, array('placeholder' => 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) + printf("[032] Expecting one row, got %d rows\n", $tmp); + + // and now, the same with anonymous placeholders... + prepex(33, $db, 'DROP TABLE IF EXISTS test'); + prepex(34, $db, sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + prepex(35, $db, "INSERT INTO test(id, label) VALUES(1, '?')"); + $stmt = prepex(36, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + prepex(37, $db, 'DELETE FROM test'); + prepex(38, $db, 'INSERT INTO test(id, label) VALUES(1, ?)', + array('first row')); + prepex(39, $db, 'INSERT INTO test(id, label) VALUES(2, ?)', + array('second row')); + $stmt = prepex(40, $db, 'SELECT label FROM test'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // Is PDO fun? + prepex(40, $db, 'SELECT label FROM test WHERE ? > 1', + array('id')); + prepex(41, $db, 'SELECT ? FROM test WHERE id > 1', + array('id')); + prepex(42, $db, 'SELECT ? FROM test WHERE ? > ?', + array('id', 'label', 'value')); + + for ($num_params = 2; $num_params < 100; $num_params++) { + $params = array('a'); + for ($i = 1; $i < $num_params; $i++) { + $params[] = 'some data'; + } + prepex(43, $db, 'SELECT id, label FROM test WHERE label > ?', + $params, array('execute' => array('sqlstate' => 'HY093'))); + } + + prepex(44, $db, 'DELETE FROM test'); + prepex(45, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', + array('row', 'row')); + $stmt = prepex(46, $db, 'SELECT id, label FROM test ORDER BY id'); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + $exp = array( + 0 => array( + "id" => "1", + "label" => "row" + ), + 1 => array( + "id" => "2", + "label" => "row" + ), + ); + + if (MySQLPDOTest::isPDOMySQLnd()) { + // mysqlnd returns native types + $exp[0]['id'] = 1; + $exp[1]['id'] = 2; + } + if ($tmp !== $exp) { + printf("[064] Results seem wrong. Please check dumps manually.\n"); + var_dump($exp); + var_dump($tmp); + } + + $stmt = prepex(47, $db, 'SELECT id, label FROM test WHERE ? IS NOT NULL', + array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[048] '1' IS NOT NULL evaluates to true, expecting two rows, got %d rows\n", $tmp); + + $stmt = prepex(49, $db, 'SELECT id, label FROM test WHERE ? IS NULL', + array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[050] '1' IS NOT NULL evaluates to true, expecting zero rows, got %d rows\n", $tmp); + + prepex(51, $db, 'DROP TABLE IF EXISTS test'); + prepex(52, $db, 'CREATE TABLE test(id INT, label CHAR(255)) ENGINE=MyISAM'); + if (is_object(prepex(53, $db, 'CREATE FULLTEXT INDEX idx1 ON test(label)', null, null, true))) { + prepex(54, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', + array('MySQL is the best database in the world!')); + prepex(55, $db, 'INSERT INTO test(id, label) VALUES (1, ?)', + array('If I have the freedom to choose, I would always go again for the MySQL Server')); + $stmt = prepex(56, $db, 'SELECT id, label FROM test WHERE MATCH label AGAINST (?)', + array('mysql'), null, true); + /* + Lets ignore that + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[074] Expecting two rows, got %d rows\n", $tmp); + */ + } + + prepex(57, $db, 'DELETE FROM test'); + prepex(58, $db, 'INSERT INTO test(id, label) VALUES (1, ?), (2, ?)', + array('row1', 'row2')); + + /* + TODO enable after fix + $stmt = prepex(37, $db, 'SELECT id, label FROM \'test WHERE MATCH label AGAINST (:placeholder)', + array(':placeholder' => 'row'), + array('execute' => array('sqlstate' => '42000', 'mysql' => 1064))); + */ + + $stmt = prepex(59, $db, 'SELECT id, label AS "label" FROM test WHERE label = ?', + array('row1')); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + $exp = array( + 0 => array("id" => "1", "label" => "row1") + ); + + if (MySQLPDOTest::isPDOMySQLnd()) { + // mysqlnd returns native types + $exp[0]['id'] = 1; + } + if ($tmp !== $exp) { + printf("[065] Results seem wrong. Please check dumps manually.\n"); + var_dump($exp); + var_dump($tmp); + } + + $sql = sprintf("SELECT id, label FROM test WHERE (label LIKE %s) AND (id = ?)", + $db->quote('%ro%')); + $stmt = prepex(60, $db, $sql, array(-1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 0) + printf("[061] Expecting zero rows, got %d rows\n", $tmp); + + $sql = sprintf("SELECT id, label FROM test WHERE (id = ?) OR (label LIKE %s)", + $db->quote('%ro%')); + $stmt = prepex(61, $db, $sql, array(1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 2) + printf("[062] Expecting two rows, got %d rows\n", $tmp); + + $sql = "SELECT id, label FROM test WHERE id = ? AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"; + $stmt = prepex(63, $db, $sql, array(1, 1)); + if (count(($tmp = $stmt->fetchAll(PDO::FETCH_ASSOC))) != 1) + printf("[064] Expecting one row, got %d rows\n", $tmp); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt index 48bd33fda5..88f9f5dcf1 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_clear_error.phpt @@ -9,64 +9,64 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { + try { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - // We need to run the emulated version first. Native version will cause a fatal error - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); + // We need to run the emulated version first. Native version will cause a fatal error + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); - // INSERT a single row - $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); + // INSERT a single row + $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); - $stmt = $db->prepare('SELECT unknown_column FROM test WHERE id > :placeholder ORDER BY id ASC'); - $stmt->execute(array(':placeholder' => 0)); - if ('00000' !== $stmt->errorCode()) - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare('SELECT unknown_column FROM test WHERE id > :placeholder ORDER BY id ASC'); + $stmt->execute(array(':placeholder' => 0)); + if ('00000' !== $stmt->errorCode()) + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > :placeholder ORDER BY id ASC'); - $stmt->execute(array(':placeholder' => 0)); - if ('00000' !== $stmt->errorCode()) - printf("[004] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > :placeholder ORDER BY id ASC'); + $stmt->execute(array(':placeholder' => 0)); + if ('00000' !== $stmt->errorCode()) + printf("[004] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // Native PS - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[005] Unable to turn off emulated prepared statements\n"); + // Native PS + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[005] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare('SELECT unknown_column FROM test WHERE id > :placeholder ORDER BY id ASC'); - $stmt->execute(array(':placeholder' => 0)); - if ('00000' !== $stmt->errorCode()) - printf("[006] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare('SELECT unknown_column FROM test WHERE id > :placeholder ORDER BY id ASC'); + $stmt->execute(array(':placeholder' => 0)); + if ('00000' !== $stmt->errorCode()) + printf("[006] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > :placeholder ORDER BY id ASC'); - $stmt->execute(array(':placeholder' => 0)); - if ('00000' !== $stmt->errorCode()) - printf("[007] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > :placeholder ORDER BY id ASC'); + $stmt->execute(array(':placeholder' => 0)); + if ('00000' !== $stmt->errorCode()) + printf("[007] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_column.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_column.phpt index 1ee1c3a43b..4c9dcb0e7e 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_column.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_column.phpt @@ -9,24 +9,24 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare("SELECT :param FROM test ORDER BY id ASC LIMIT 1"); - $stmt->execute(array(':param' => 'id')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare("SELECT :param FROM test ORDER BY id ASC LIMIT 1"); + $stmt->execute(array(':param' => 'id')); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $db->prepare('SELECT :placeholder FROM test WHERE :placeholder > :placeholder'); - $stmt->execute(array(':placeholder' => 'test')); + $db->prepare('SELECT :placeholder FROM test WHERE :placeholder > :placeholder'); + $stmt->execute(array(':placeholder' => 'test')); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_dup_named_placeholder.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_dup_named_placeholder.phpt index c9465b62a2..1c5ddc407f 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_dup_named_placeholder.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_dup_named_placeholder.phpt @@ -9,90 +9,90 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - try { - - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label1 CHAR(255), label2 CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); - printf("Native...\n"); - - // INSERT a single row - $stmt = $db->prepare('INSERT INTO test(id, label1, label2) VALUES (1, :placeholder, :placeholder)'); - - $stmt->execute(array(':placeholder' => 'row1')); - if ('00000' !== $stmt->errorCode()) - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - - // Ok, what has happened: anything inserted into the DB? - $stmt = $db->prepare('SELECT id, label1, label2 FROM test WHERE id = 1'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // Now the same with emulated PS. - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn on emulated prepared statements\n"); - printf("Emulated...\n"); - - $stmt = $db->prepare('INSERT INTO test(id, label1, label2) VALUES(2, :placeholder, :placeholder)'); - // No replacement shall be made - $stmt->execute(array(':placeholder' => 'row2')); - if ('00000' !== $stmt->errorCode()) - printf("[005] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - - // Now, what do we have in the DB? - $stmt = $db->prepare('SELECT id, label1, label2 FROM test WHERE id = 2'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // - // Another variation of the theme - // - - $db->exec('DELETE FROM test'); - $db->exec("INSERT INTO test (id, label1, label2) VALUES (1, 'row1', 'row2')"); - $sql = "SELECT id, label1 FROM test WHERE id = :placeholder AND label1 = (SELECT label1 AS 'SELECT' FROM test WHERE id = :placeholder)"; - - // emulated... - $stmt = $db->prepare($sql); - $stmt->execute(array(':placeholder' => 1)); - if ('00000' !== $stmt->errorCode()) - printf("[006] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - // native... - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[007] Unable to turn off emulated prepared statements\n"); - printf("Native...\n"); - - $stmt = $db->prepare($sql); - $stmt->execute(array(':placeholder' => 1)); - if ('00000' !== $stmt->errorCode()) - printf("[008] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + try { + + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label1 CHAR(255), label2 CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); + printf("Native...\n"); + + // INSERT a single row + $stmt = $db->prepare('INSERT INTO test(id, label1, label2) VALUES (1, :placeholder, :placeholder)'); + + $stmt->execute(array(':placeholder' => 'row1')); + if ('00000' !== $stmt->errorCode()) + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + + // Ok, what has happened: anything inserted into the DB? + $stmt = $db->prepare('SELECT id, label1, label2 FROM test WHERE id = 1'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // Now the same with emulated PS. + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn on emulated prepared statements\n"); + printf("Emulated...\n"); + + $stmt = $db->prepare('INSERT INTO test(id, label1, label2) VALUES(2, :placeholder, :placeholder)'); + // No replacement shall be made + $stmt->execute(array(':placeholder' => 'row2')); + if ('00000' !== $stmt->errorCode()) + printf("[005] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + + // Now, what do we have in the DB? + $stmt = $db->prepare('SELECT id, label1, label2 FROM test WHERE id = 2'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // + // Another variation of the theme + // + + $db->exec('DELETE FROM test'); + $db->exec("INSERT INTO test (id, label1, label2) VALUES (1, 'row1', 'row2')"); + $sql = "SELECT id, label1 FROM test WHERE id = :placeholder AND label1 = (SELECT label1 AS 'SELECT' FROM test WHERE id = :placeholder)"; + + // emulated... + $stmt = $db->prepare($sql); + $stmt->execute(array(':placeholder' => 1)); + if ('00000' !== $stmt->errorCode()) + printf("[006] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + // native... + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[007] Unable to turn off emulated prepared statements\n"); + printf("Native...\n"); + + $stmt = $db->prepare($sql); + $stmt->execute(array(':placeholder' => 1)); + if ('00000' !== $stmt->errorCode()) + printf("[008] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt index e706b92616..d24cb894ac 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_mixed_style.phpt @@ -9,22 +9,22 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); - $stmt = $db->query('DELETE FROM test'); - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?), (2, ?)'); - $stmt->execute(array('a', 'b')); - $stmt = $db->prepare("SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"); - $stmt->execute(array(1, 1)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('DELETE FROM test'); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?), (2, ?)'); + $stmt->execute(array('a', 'b')); + $stmt = $db->prepare("SELECT id, label FROM test WHERE id = :placeholder AND label = (SELECT label AS 'SELECT' FROM test WHERE id = ?)"); + $stmt->execute(array(1, 1)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_named_placeholder.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_named_placeholder.phpt index 12acdcc0b1..6b553375d6 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_named_placeholder.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_named_placeholder.phpt @@ -9,62 +9,62 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { + try { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); - // INSERT a single row - $stmt = $db->prepare("INSERT INTO test(id, label) VALUES (100, ':placeholder')"); + // INSERT a single row + $stmt = $db->prepare("INSERT INTO test(id, label) VALUES (100, ':placeholder')"); - // Yes, there is no placeholder to bind to and named placeholder - // do not work with MySQL native PS, but lets see what happens! - // The ':placeholder' is a string constant in the INSERT statement. - // I would expect to get an error message, but this is not what happens. - $stmt->execute(array(':placeholder' => 'row1')); - if ('00000' !== $stmt->errorCode()) - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + // Yes, there is no placeholder to bind to and named placeholder + // do not work with MySQL native PS, but lets see what happens! + // The ':placeholder' is a string constant in the INSERT statement. + // I would expect to get an error message, but this is not what happens. + $stmt->execute(array(':placeholder' => 'row1')); + if ('00000' !== $stmt->errorCode()) + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - // Ok, what has happened: anything inserted into the DB? - $stmt = $db->prepare('SELECT id, label FROM test'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + // Ok, what has happened: anything inserted into the DB? + $stmt = $db->prepare('SELECT id, label FROM test'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // Now the same with emulated PS. - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn on emulated prepared statements\n"); + // Now the same with emulated PS. + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn on emulated prepared statements\n"); - // Note that the "named placeholder" is enclosed by double quotes. - $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(101, ':placeholder')"); - // No replacement shall be made - $stmt->execute(array(':placeholder' => 'row1')); - // Again, I'd like to see an error message - if ('00000' !== $stmt->errorCode()) - printf("[005] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + // Note that the "named placeholder" is enclosed by double quotes. + $stmt = $db->prepare("INSERT INTO test(id, label) VALUES(101, ':placeholder')"); + // No replacement shall be made + $stmt->execute(array(':placeholder' => 'row1')); + // Again, I'd like to see an error message + if ('00000' !== $stmt->errorCode()) + printf("[005] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - // Now, what do we have in the DB? - $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + // Now, what do we have in the DB? + $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_placeholder_everywhere.phpt b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_placeholder_everywhere.phpt index 8df6961f93..a7a76a462b 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_prepare_native_placeholder_everywhere.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_prepare_native_placeholder_everywhere.phpt @@ -9,55 +9,55 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to switch on emulated prepared statements, test will fail\n"); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to switch on emulated prepared statements, test will fail\n"); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); - $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label CHAR(255)) ENGINE=%s', PDO_MYSQL_TEST_ENGINE)); + $db->exec("INSERT INTO test(id, label) VALUES (1, 'row1')"); - $stmt = $db->prepare('SELECT ?, id, label FROM test WHERE ? = ? ORDER BY id ASC'); - $stmt->execute(array('id', 'label', 'label')); - if ('00000' !== $stmt->errorCode()) - printf("[003] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->prepare('SELECT ?, id, label FROM test WHERE ? = ? ORDER BY id ASC'); + $stmt->execute(array('id', 'label', 'label')); + if ('00000' !== $stmt->errorCode()) + printf("[003] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - // now the same with native PS - printf("now the same with native PS\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to switch off emulated prepared statements, test will fail\n"); + // now the same with native PS + printf("now the same with native PS\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to switch off emulated prepared statements, test will fail\n"); - $stmt = $db->prepare('SELECT ?, id, label FROM test WHERE ? = ? ORDER BY id ASC'); - $stmt->execute(array('id', 'label', 'label')); - if ('00000' !== $stmt->errorCode()) - printf("[005] Execute has failed, %s %s\n", - var_export($stmt->errorCode(), true), - var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare('SELECT ?, id, label FROM test WHERE ? = ? ORDER BY id ASC'); + $stmt->execute(array('id', 'label', 'label')); + if ('00000' !== $stmt->errorCode()) + printf("[005] Execute has failed, %s %s\n", + var_export($stmt->errorCode(), true), + var_export($stmt->errorInfo(), true)); - $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); - if (!MySQLPDOTest::isPDOMySQLnd()) { - if (isset($tmp[0]['id'])) { - // libmysql should return a string here whereas mysqlnd returns a native int - if (gettype($tmp[0]['id']) == 'string') - // convert to int for the test output... - settype($tmp[0]['id'], 'integer'); - } - } - var_dump($tmp); + $tmp = $stmt->fetchAll(PDO::FETCH_ASSOC); + if (!MySQLPDOTest::isPDOMySQLnd()) { + if (isset($tmp[0]['id'])) { + // libmysql should return a string here whereas mysqlnd returns a native int + if (gettype($tmp[0]['id']) == 'string') + // convert to int for the test output... + settype($tmp[0]['id'], 'integer'); + } + } + var_dump($tmp); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt index 30f1d56f88..96e77a1326 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_rollback.phpt @@ -11,75 +11,75 @@ if (false == MySQLPDOTest::detect_transactional_mysql_engine($db)) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db, MySQLPDOTest::detect_transactional_mysql_engine($db)); - $db->beginTransaction(); + $db->beginTransaction(); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - $num = $row['_num']; + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + $num = $row['_num']; - $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); - $num++; - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[001] INSERT has failed, test will fail\n"); + $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); + $num++; + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[001] INSERT has failed, test will fail\n"); - $db->rollBack(); - $num--; - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[002] ROLLBACK has failed\n"); + $db->rollBack(); + $num--; + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[002] ROLLBACK has failed\n"); - $db->beginTransaction(); - $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); - $db->query('DROP TABLE IF EXISTS test2'); - $db->query('CREATE TABLE test2(id INT)'); - $num++; - $db->rollBack(); - $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != $num) - printf("[002] ROLLBACK should have no effect because of the implicit COMMIT - triggered by DROP/CREATE TABLE\n"); + $db->beginTransaction(); + $db->query("INSERT INTO test(id, label) VALUES (100, 'z')"); + $db->query('DROP TABLE IF EXISTS test2'); + $db->query('CREATE TABLE test2(id INT)'); + $num++; + $db->rollBack(); + $row = $db->query('SELECT COUNT(*) AS _num FROM test')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != $num) + printf("[002] ROLLBACK should have no effect because of the implicit COMMIT + triggered by DROP/CREATE TABLE\n"); - $db->query('DROP TABLE IF EXISTS test2'); - $db->query('CREATE TABLE test2(id INT) ENGINE=MyISAM'); - $db->beginTransaction(); - $db->query('INSERT INTO test2(id) VALUES (1)'); - $db->rollBack(); - $row = $db->query('SELECT COUNT(*) AS _num FROM test2')->fetch(PDO::FETCH_ASSOC); - if ($row['_num'] != 1) - printf("[003] ROLLBACK should have no effect\n"); + $db->query('DROP TABLE IF EXISTS test2'); + $db->query('CREATE TABLE test2(id INT) ENGINE=MyISAM'); + $db->beginTransaction(); + $db->query('INSERT INTO test2(id) VALUES (1)'); + $db->rollBack(); + $row = $db->query('SELECT COUNT(*) AS _num FROM test2')->fetch(PDO::FETCH_ASSOC); + if ($row['_num'] != 1) + printf("[003] ROLLBACK should have no effect\n"); - $db->query('DROP TABLE IF EXISTS test2'); + $db->query('DROP TABLE IF EXISTS test2'); - $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); - $db->beginTransaction(); - $db->query('DELETE FROM test'); - $db->rollBack(); - var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); + $db->beginTransaction(); + $db->query('DELETE FROM test'); + $db->rollBack(); + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); - $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); - $db->beginTransaction(); - $db->query('DELETE FROM test'); - $db->rollBack(); - var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); + $db->beginTransaction(); + $db->query('DELETE FROM test'); + $db->rollBack(); + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); - $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); - $db->beginTransaction(); - $db->query('DELETE FROM test'); - $db->commit(); - var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 1); + $db->beginTransaction(); + $db->query('DELETE FROM test'); + $db->commit(); + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); - $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); - $db->beginTransaction(); - $db->query('DELETE FROM test'); - $db->commit(); - var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); + $db->setAttribute(PDO::ATTR_AUTOCOMMIT, 0); + $db->beginTransaction(); + $db->query('DELETE FROM test'); + $db->commit(); + var_dump($db->getAttribute(PDO::ATTR_AUTOCOMMIT)); - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindcolumn.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindcolumn.phpt index bf56cbc835..6d1ac4bbfb 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindcolumn.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindcolumn.phpt @@ -9,97 +9,97 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); - $stmt->execute(); - $id = $label = null; + $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); + $stmt->execute(); + $id = $label = null; - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[003] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[003] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[004] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[004] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - $data = array(); - while ($stmt->fetch(PDO::FETCH_BOUND)) { - printf("id = %s (%s) / label = %s (%s)\n", - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - $data[] = array('id' => $id, 'label' => $label); - } + $data = array(); + while ($stmt->fetch(PDO::FETCH_BOUND)) { + printf("id = %s (%s) / label = %s (%s)\n", + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + $data[] = array('id' => $id, 'label' => $label); + } - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); - $index = 0; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - if ($row['id'] != $data[$index]['id']) { - printf("[005] Fetch bound and fetch assoc differ - column 'id', bound: %s/%s, assoc: %s/%s\n", - var_export($data[$index]['id'], true), gettype($data[$index]['id']), - var_export($row['id'], true), gettype($row['id'])); - } - if ($row['label'] != $data[$index]['label']) { - printf("[006] Fetch bound and fetch assoc differ - column 'label', bound: %s/%s, assoc: %s/%s\n", - var_export($data[$index]['label'], true), gettype($data[$index]['label']), - var_export($row['label'], true), gettype($row['label'])); - } - $index++; - } + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2'); + $index = 0; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + if ($row['id'] != $data[$index]['id']) { + printf("[005] Fetch bound and fetch assoc differ - column 'id', bound: %s/%s, assoc: %s/%s\n", + var_export($data[$index]['id'], true), gettype($data[$index]['id']), + var_export($row['id'], true), gettype($row['id'])); + } + if ($row['label'] != $data[$index]['label']) { + printf("[006] Fetch bound and fetch assoc differ - column 'label', bound: %s/%s, assoc: %s/%s\n", + var_export($data[$index]['label'], true), gettype($data[$index]['label']), + var_export($row['label'], true), gettype($row['label'])); + } + $index++; + } - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[007] Unable to turn off emulated prepared statements\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[007] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id ASC LIMIT 2, 2'); - $stmt->execute(); - $id = $label = null; + $stmt = $db->prepare('SELECT id, label FROM test ORDER BY id ASC LIMIT 2, 2'); + $stmt->execute(); + $id = $label = null; - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[008] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[008] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[009] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[009] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - $data = array(); - while ($stmt->fetch(PDO::FETCH_BOUND)) { - printf("id = %s (%s) / label = %s (%s)\n", - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - $data[] = array('id' => $id, 'label' => $label); - } + $data = array(); + while ($stmt->fetch(PDO::FETCH_BOUND)) { + printf("id = %s (%s) / label = %s (%s)\n", + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + $data[] = array('id' => $id, 'label' => $label); + } - $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2, 2'); - $index = 0; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - if ($row['id'] != $data[$index]['id']) { - printf("[010] Fetch bound and fetch assoc differ - column 'id', bound: %s/%s, assoc: %s/%s\n", - var_export($data[$index]['id'], true), gettype($data[$index]['id']), - var_export($row['id'], true), gettype($row['id'])); - } - if ($row['label'] != $data[$index]['label']) { - printf("[011] Fetch bound and fetch assoc differ - column 'label', bound: %s/%s, assoc: %s/%s\n", - var_export($data[$index]['label'], true), gettype($data[$index]['label']), - var_export($row['label'], true), gettype($row['label'])); - } - $index++; - } + $stmt = $db->query('SELECT id, label FROM test ORDER BY id ASC LIMIT 2, 2'); + $index = 0; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + if ($row['id'] != $data[$index]['id']) { + printf("[010] Fetch bound and fetch assoc differ - column 'id', bound: %s/%s, assoc: %s/%s\n", + var_export($data[$index]['id'], true), gettype($data[$index]['id']), + var_export($row['id'], true), gettype($row['id'])); + } + if ($row['label'] != $data[$index]['label']) { + printf("[011] Fetch bound and fetch assoc differ - column 'label', bound: %s/%s, assoc: %s/%s\n", + var_export($data[$index]['label'], true), gettype($data[$index]['label']), + var_export($row['label'], true), gettype($row['label'])); + } + $index++; + } - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam.phpt index 422c519355..4559c499ea 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam.phpt @@ -8,113 +8,113 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); - - MySQLPDOTest::createTestTable($db); - - function pdo_mysql_stmt_bindparam($db, $offset) { - - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindParam(1, $in)) - printf("[%03d + 1] Cannot bind parameter, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[%03d + 2] Cannot bind integer column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Same again...\n"); - $stmt->execute(); - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - // NULL values - printf("NULL...\n"); - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (100, ?)'); - $label = null; - if (!$stmt->bindParam(1, $label)) - printf("[%03d + 4] Cannot bind parameter, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->execute()) - printf("[%03d + 5] Cannot execute statement, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - /* NOTE: you cannot use PDO::query() with unbuffered, native PS - see extra test */ - $stmt = $db->prepare('SELECT id, NULL AS _label FROM test WHERE label IS NULL'); - $stmt->execute(); - - $id = $label = 'bogus'; - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[%03d + 6] Cannot bind NULL column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - } - - try { - printf("Emulated PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); - - printf("Buffered...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - pdo_mysql_stmt_bindparam($db, 3); - - printf("Unbuffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - pdo_mysql_stmt_bindparam($db, 4); - - printf("Native PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn off emulated prepared statements\n"); - - printf("Buffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - pdo_mysql_stmt_bindparam($db, 5); - - printf("Unbuffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - pdo_mysql_stmt_bindparam($db, 6); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + + MySQLPDOTest::createTestTable($db); + + function pdo_mysql_stmt_bindparam($db, $offset) { + + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindParam(1, $in)) + printf("[%03d + 1] Cannot bind parameter, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[%03d + 2] Cannot bind integer column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Same again...\n"); + $stmt->execute(); + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + // NULL values + printf("NULL...\n"); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (100, ?)'); + $label = null; + if (!$stmt->bindParam(1, $label)) + printf("[%03d + 4] Cannot bind parameter, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->execute()) + printf("[%03d + 5] Cannot execute statement, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + /* NOTE: you cannot use PDO::query() with unbuffered, native PS - see extra test */ + $stmt = $db->prepare('SELECT id, NULL AS _label FROM test WHERE label IS NULL'); + $stmt->execute(); + + $id = $label = 'bogus'; + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[%03d + 6] Cannot bind NULL column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + } + + try { + printf("Emulated PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); + + printf("Buffered...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + pdo_mysql_stmt_bindparam($db, 3); + + printf("Unbuffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + pdo_mysql_stmt_bindparam($db, 4); + + printf("Native PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn off emulated prepared statements\n"); + + printf("Buffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + pdo_mysql_stmt_bindparam($db, 5); + + printf("Unbuffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + pdo_mysql_stmt_bindparam($db, 6); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam_types.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam_types.phpt index 0e34313a96..5da2bb30fb 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam_types.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindparam_types.phpt @@ -9,160 +9,160 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - - function pdo_mysql_stmt_bindparam_types_do($db, $offset, $native, $sql_type, $value) { - - if ($native) - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - else - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); - if ((!$stmt = @$db->prepare($sql)) || (!@$stmt->execute())) - // Server might not support column type - skip it - return true; - - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?)'); - if (!$stmt->bindParam(1, $value)) { - printf("[%03d/%s + 1] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - if (!$stmt->execute()) { - printf("[%03d/%s + 2] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - - $stmt = $db->query('SELECT id, label FROM test'); - $id = $label = null; - if (!$stmt->bindColumn(1, $id)) { - printf("[%03d/%s + 3] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - if (!$stmt->bindColumn(2, $label)) { - printf("[%03d/%s + 4] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - - if (!$stmt->fetch(PDO::FETCH_BOUND)) { - printf("[%03d/%s + 5] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - $stmt->closeCursor(); - - if ($label != $value) { - printf("[%03d/%s + 6] Got %s expecting %s - please check manually\n", - $offset, ($native) ? 'native' : 'emulated', - var_export($label, true), var_export($value, true)); - // fall through - } - - $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - if (empty($row)) { - printf("[%03d/%s + 7] %s\n", $offset, ($native) ? 'native' : 'emulated', - var_export($stmt->errorInfo(), true)); - return false; - } - - if ($row['label'] != $value) { - printf("[%03d/%s + 8] Got %s expecting %s - please check manually\n", - $offset, ($native) ? 'native' : 'emulated', - var_export($row['label'], true), var_export($value, true)); - return false; - } - - if ($row['label'] != $label) { - printf("[%03d/%s + 9] Got %s from FETCH_ASSOC and %s from FETCH_BOUND- please check manually\n", - $offset, ($native) ? 'native' : 'emulated', - var_export($row['label'], true), var_export($value, true)); - return false; - } - - $db->exec('DROP TABLE IF EXISTS test'); - return true; - } - - function pdo_mysql_stmt_bindparam_types($db, $offset, $sql_type, $value) { - - pdo_mysql_stmt_bindparam_types_do($db, $offset, true, $sql_type, $value); - pdo_mysql_stmt_bindparam_types_do($db, $offset, false, $sql_type, $value); - - } - - try { - - // pdo_mysql_stmt_bindparam_types($db, 2, 'BIT(8)', 1); - pdo_mysql_stmt_bindparam_types($db, 3, 'TINYINT', -127); - pdo_mysql_stmt_bindparam_types($db, 4, 'TINYINT UNSIGNED', 255); - pdo_mysql_stmt_bindparam_types($db, 5, 'BOOLEAN', 1); - pdo_mysql_stmt_bindparam_types($db, 6, 'SMALLINT', -32768); - pdo_mysql_stmt_bindparam_types($db, 7, 'SMALLINT UNSIGNED', 65535); - pdo_mysql_stmt_bindparam_types($db, 8, 'MEDIUMINT', -8388608); - pdo_mysql_stmt_bindparam_types($db, 9, 'MEDIUMINT UNSIGNED', 16777215); - pdo_mysql_stmt_bindparam_types($db, 10, 'INT', -2147483648); - pdo_mysql_stmt_bindparam_types($db, 11, 'INT UNSIGNED', 4294967295); - pdo_mysql_stmt_bindparam_types($db, 12, 'BIGINT', -1000); - pdo_mysql_stmt_bindparam_types($db, 13, 'BIGINT UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 14, 'REAL', -1000); - pdo_mysql_stmt_bindparam_types($db, 15, 'REAL UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 16, 'REAL ZEROFILL', '0000000000000000000000'); - pdo_mysql_stmt_bindparam_types($db, 17, 'REAL UNSIGNED ZEROFILL', '0000000000000000000010'); - pdo_mysql_stmt_bindparam_types($db, 18, 'DOUBLE', -1000); - pdo_mysql_stmt_bindparam_types($db, 19, 'DOUBLE UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 20, 'DOUBLE ZEROFILL', '000000000000'); - pdo_mysql_stmt_bindparam_types($db, 21, 'DOUBLE ZEROFILL UNSIGNED', '000000001000'); - pdo_mysql_stmt_bindparam_types($db, 22, 'FLOAT', -1000); - pdo_mysql_stmt_bindparam_types($db, 23, 'FLOAT UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 24, 'FLOAT ZEROFILL', '000000000000'); - pdo_mysql_stmt_bindparam_types($db, 25, 'FLOAT ZEROFILL UNSIGNED', '000000001000'); - pdo_mysql_stmt_bindparam_types($db, 26, 'DECIMAL', -1000); - pdo_mysql_stmt_bindparam_types($db, 27, 'DECIMAL UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 28, 'DECIMAL ZEROFILL', '000000000000'); - pdo_mysql_stmt_bindparam_types($db, 29, 'DECIMAL ZEROFILL UNSIGNED', '000000001000'); - pdo_mysql_stmt_bindparam_types($db, 30, 'NUMERIC', -1000); - pdo_mysql_stmt_bindparam_types($db, 31, 'NUMERIC UNSIGNED', 1000); - pdo_mysql_stmt_bindparam_types($db, 32, 'NUMERIC ZEROFILL', '000000000000'); - pdo_mysql_stmt_bindparam_types($db, 33, 'NUMERIC ZEROFILL UNSIGNED', '000000001000'); - pdo_mysql_stmt_bindparam_types($db, 34, 'DATE', '2008-04-23'); - pdo_mysql_stmt_bindparam_types($db, 35, 'TIME', '16:43:12'); - pdo_mysql_stmt_bindparam_types($db, 36, 'TIMESTAMP', '2008-04-23 16:44:53'); - pdo_mysql_stmt_bindparam_types($db, 37, 'DATETIME', '2008-04-23 16:44:53'); - pdo_mysql_stmt_bindparam_types($db, 38, 'YEAR', '2008'); - pdo_mysql_stmt_bindparam_types($db, 39, 'CHAR(1)', 'a'); - pdo_mysql_stmt_bindparam_types($db, 40, 'CHAR(255)', 'abc'); - pdo_mysql_stmt_bindparam_types($db, 41, 'VARCHAR(255)', str_repeat('a', 255)); - pdo_mysql_stmt_bindparam_types($db, 42, 'BINARY(255)', str_repeat('a', 255)); - pdo_mysql_stmt_bindparam_types($db, 43, 'VARBINARY(255)', str_repeat('a', 255)); - pdo_mysql_stmt_bindparam_types($db, 44, 'TINYBLOB', str_repeat('a', 255)); - pdo_mysql_stmt_bindparam_types($db, 45, 'BLOB', str_repeat('b', 300)); - pdo_mysql_stmt_bindparam_types($db, 46, 'MEDIUMBLOB', str_repeat('b', 300)); - pdo_mysql_stmt_bindparam_types($db, 47, 'LONGBLOB', str_repeat('b', 300)); - pdo_mysql_stmt_bindparam_types($db, 48, 'TINYTEXT', str_repeat('c', 255)); - pdo_mysql_stmt_bindparam_types($db, 49, 'TINYTEXT BINARY', str_repeat('c', 255)); - pdo_mysql_stmt_bindparam_types($db, 50, 'TEXT', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 51, 'TEXT BINARY', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 52, 'MEDIUMTEXT', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 53, 'MEDIUMTEXT BINARY', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 54, 'LONGTEXT', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 55, 'LONGTEXT BINARY', str_repeat('d', 300)); - pdo_mysql_stmt_bindparam_types($db, 56, "ENUM('yes', 'no') DEFAULT 'yes'", "no"); - pdo_mysql_stmt_bindparam_types($db, 57, "SET('yes', 'no') DEFAULT 'yes'", "no"); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + + function pdo_mysql_stmt_bindparam_types_do($db, $offset, $native, $sql_type, $value) { + + if ($native) + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + else + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); + if ((!$stmt = @$db->prepare($sql)) || (!@$stmt->execute())) + // Server might not support column type - skip it + return true; + + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (1, ?)'); + if (!$stmt->bindParam(1, $value)) { + printf("[%03d/%s + 1] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + if (!$stmt->execute()) { + printf("[%03d/%s + 2] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + + $stmt = $db->query('SELECT id, label FROM test'); + $id = $label = null; + if (!$stmt->bindColumn(1, $id)) { + printf("[%03d/%s + 3] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + if (!$stmt->bindColumn(2, $label)) { + printf("[%03d/%s + 4] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + + if (!$stmt->fetch(PDO::FETCH_BOUND)) { + printf("[%03d/%s + 5] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + $stmt->closeCursor(); + + if ($label != $value) { + printf("[%03d/%s + 6] Got %s expecting %s - please check manually\n", + $offset, ($native) ? 'native' : 'emulated', + var_export($label, true), var_export($value, true)); + // fall through + } + + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + if (empty($row)) { + printf("[%03d/%s + 7] %s\n", $offset, ($native) ? 'native' : 'emulated', + var_export($stmt->errorInfo(), true)); + return false; + } + + if ($row['label'] != $value) { + printf("[%03d/%s + 8] Got %s expecting %s - please check manually\n", + $offset, ($native) ? 'native' : 'emulated', + var_export($row['label'], true), var_export($value, true)); + return false; + } + + if ($row['label'] != $label) { + printf("[%03d/%s + 9] Got %s from FETCH_ASSOC and %s from FETCH_BOUND- please check manually\n", + $offset, ($native) ? 'native' : 'emulated', + var_export($row['label'], true), var_export($value, true)); + return false; + } + + $db->exec('DROP TABLE IF EXISTS test'); + return true; + } + + function pdo_mysql_stmt_bindparam_types($db, $offset, $sql_type, $value) { + + pdo_mysql_stmt_bindparam_types_do($db, $offset, true, $sql_type, $value); + pdo_mysql_stmt_bindparam_types_do($db, $offset, false, $sql_type, $value); + + } + + try { + + // pdo_mysql_stmt_bindparam_types($db, 2, 'BIT(8)', 1); + pdo_mysql_stmt_bindparam_types($db, 3, 'TINYINT', -127); + pdo_mysql_stmt_bindparam_types($db, 4, 'TINYINT UNSIGNED', 255); + pdo_mysql_stmt_bindparam_types($db, 5, 'BOOLEAN', 1); + pdo_mysql_stmt_bindparam_types($db, 6, 'SMALLINT', -32768); + pdo_mysql_stmt_bindparam_types($db, 7, 'SMALLINT UNSIGNED', 65535); + pdo_mysql_stmt_bindparam_types($db, 8, 'MEDIUMINT', -8388608); + pdo_mysql_stmt_bindparam_types($db, 9, 'MEDIUMINT UNSIGNED', 16777215); + pdo_mysql_stmt_bindparam_types($db, 10, 'INT', -2147483648); + pdo_mysql_stmt_bindparam_types($db, 11, 'INT UNSIGNED', 4294967295); + pdo_mysql_stmt_bindparam_types($db, 12, 'BIGINT', -1000); + pdo_mysql_stmt_bindparam_types($db, 13, 'BIGINT UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 14, 'REAL', -1000); + pdo_mysql_stmt_bindparam_types($db, 15, 'REAL UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 16, 'REAL ZEROFILL', '0000000000000000000000'); + pdo_mysql_stmt_bindparam_types($db, 17, 'REAL UNSIGNED ZEROFILL', '0000000000000000000010'); + pdo_mysql_stmt_bindparam_types($db, 18, 'DOUBLE', -1000); + pdo_mysql_stmt_bindparam_types($db, 19, 'DOUBLE UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 20, 'DOUBLE ZEROFILL', '000000000000'); + pdo_mysql_stmt_bindparam_types($db, 21, 'DOUBLE ZEROFILL UNSIGNED', '000000001000'); + pdo_mysql_stmt_bindparam_types($db, 22, 'FLOAT', -1000); + pdo_mysql_stmt_bindparam_types($db, 23, 'FLOAT UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 24, 'FLOAT ZEROFILL', '000000000000'); + pdo_mysql_stmt_bindparam_types($db, 25, 'FLOAT ZEROFILL UNSIGNED', '000000001000'); + pdo_mysql_stmt_bindparam_types($db, 26, 'DECIMAL', -1000); + pdo_mysql_stmt_bindparam_types($db, 27, 'DECIMAL UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 28, 'DECIMAL ZEROFILL', '000000000000'); + pdo_mysql_stmt_bindparam_types($db, 29, 'DECIMAL ZEROFILL UNSIGNED', '000000001000'); + pdo_mysql_stmt_bindparam_types($db, 30, 'NUMERIC', -1000); + pdo_mysql_stmt_bindparam_types($db, 31, 'NUMERIC UNSIGNED', 1000); + pdo_mysql_stmt_bindparam_types($db, 32, 'NUMERIC ZEROFILL', '000000000000'); + pdo_mysql_stmt_bindparam_types($db, 33, 'NUMERIC ZEROFILL UNSIGNED', '000000001000'); + pdo_mysql_stmt_bindparam_types($db, 34, 'DATE', '2008-04-23'); + pdo_mysql_stmt_bindparam_types($db, 35, 'TIME', '16:43:12'); + pdo_mysql_stmt_bindparam_types($db, 36, 'TIMESTAMP', '2008-04-23 16:44:53'); + pdo_mysql_stmt_bindparam_types($db, 37, 'DATETIME', '2008-04-23 16:44:53'); + pdo_mysql_stmt_bindparam_types($db, 38, 'YEAR', '2008'); + pdo_mysql_stmt_bindparam_types($db, 39, 'CHAR(1)', 'a'); + pdo_mysql_stmt_bindparam_types($db, 40, 'CHAR(255)', 'abc'); + pdo_mysql_stmt_bindparam_types($db, 41, 'VARCHAR(255)', str_repeat('a', 255)); + pdo_mysql_stmt_bindparam_types($db, 42, 'BINARY(255)', str_repeat('a', 255)); + pdo_mysql_stmt_bindparam_types($db, 43, 'VARBINARY(255)', str_repeat('a', 255)); + pdo_mysql_stmt_bindparam_types($db, 44, 'TINYBLOB', str_repeat('a', 255)); + pdo_mysql_stmt_bindparam_types($db, 45, 'BLOB', str_repeat('b', 300)); + pdo_mysql_stmt_bindparam_types($db, 46, 'MEDIUMBLOB', str_repeat('b', 300)); + pdo_mysql_stmt_bindparam_types($db, 47, 'LONGBLOB', str_repeat('b', 300)); + pdo_mysql_stmt_bindparam_types($db, 48, 'TINYTEXT', str_repeat('c', 255)); + pdo_mysql_stmt_bindparam_types($db, 49, 'TINYTEXT BINARY', str_repeat('c', 255)); + pdo_mysql_stmt_bindparam_types($db, 50, 'TEXT', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 51, 'TEXT BINARY', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 52, 'MEDIUMTEXT', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 53, 'MEDIUMTEXT BINARY', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 54, 'LONGTEXT', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 55, 'LONGTEXT BINARY', str_repeat('d', 300)); + pdo_mysql_stmt_bindparam_types($db, 56, "ENUM('yes', 'no') DEFAULT 'yes'", "no"); + pdo_mysql_stmt_bindparam_types($db, 57, "SET('yes', 'no') DEFAULT 'yes'", "no"); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindvalue.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindvalue.phpt index 173105a48e..537156ebbf 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_bindvalue.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_bindvalue.phpt @@ -9,291 +9,291 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - - printf("Testing native PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); - - printf("Binding variable...\n"); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[003] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[004] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[005] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding value and not variable...\n"); - if (!$stmt->bindValue(1, 0)) - printf("[006] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[007] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[008] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding variable which references another variable...\n"); - $in = 0; - $in_ref = &$in; - if (!$stmt->bindValue(1, $in_ref)) - printf("[009] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[010] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[011] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - - printf("Binding a variable and a value...\n"); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[012] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindValue(2, 2)) - printf("[013] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[014] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[015] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding a variable to two placeholders and changing the variable value in between the binds...\n"); - // variable value change shall have no impact - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[016] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $in = 2; - if (!$stmt->bindValue(2, $in)) - printf("[017] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[018] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[019] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - printf("Testing emulated PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); - - printf("Binding variable...\n"); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[003] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[004] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[005] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding value and not variable...\n"); - if (!$stmt->bindValue(1, 0)) - printf("[006] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[007] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[008] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding variable which references another variable...\n"); - $in = 0; - $in_ref = &$in; - if (!$stmt->bindValue(1, $in_ref)) - printf("[009] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[010] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[011] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - - printf("Binding a variable and a value...\n"); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[012] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindValue(2, 2)) - printf("[013] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[014] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[015] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - printf("Binding a variable to two placeholders and changing the variable value in between the binds...\n"); - // variable value change shall have no impact - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindValue(1, $in)) - printf("[016] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $in = 2; - if (!$stmt->bindValue(2, $in)) - printf("[017] Cannot bind value, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[018] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[019] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + + printf("Testing native PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); + + printf("Binding variable...\n"); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[003] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[004] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[005] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding value and not variable...\n"); + if (!$stmt->bindValue(1, 0)) + printf("[006] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[007] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[008] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding variable which references another variable...\n"); + $in = 0; + $in_ref = &$in; + if (!$stmt->bindValue(1, $in_ref)) + printf("[009] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[010] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[011] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + + printf("Binding a variable and a value...\n"); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[012] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindValue(2, 2)) + printf("[013] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[014] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[015] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding a variable to two placeholders and changing the variable value in between the binds...\n"); + // variable value change shall have no impact + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[016] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $in = 2; + if (!$stmt->bindValue(2, $in)) + printf("[017] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[018] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[019] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + printf("Testing emulated PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); + + printf("Binding variable...\n"); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[003] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[004] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[005] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding value and not variable...\n"); + if (!$stmt->bindValue(1, 0)) + printf("[006] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[007] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[008] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding variable which references another variable...\n"); + $in = 0; + $in_ref = &$in; + if (!$stmt->bindValue(1, $in_ref)) + printf("[009] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[010] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[011] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + + printf("Binding a variable and a value...\n"); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[012] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindValue(2, 2)) + printf("[013] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[014] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[015] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + printf("Binding a variable to two placeholders and changing the variable value in between the binds...\n"); + // variable value change shall have no impact + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? AND id <= ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindValue(1, $in)) + printf("[016] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $in = 2; + if (!$stmt->bindValue(2, $in)) + printf("[017] Cannot bind value, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[018] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[019] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_blobfromsteam.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_blobfromsteam.phpt index bea8773a23..9d6ee3d9b8 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_blobfromsteam.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_blobfromsteam.phpt @@ -28,112 +28,112 @@ unlink($file); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - function blob_from_stream($offset, $db, $file, $blob) { - - @unlink($file); - clearstatcache(); - if (file_exists($file)) { - printf("[%03d + 1] Cannot remove old test file\n", $offset); - return false; - } - - $fp = fopen($file, 'w'); - if (!$fp || !fwrite($fp, $blob)) { - printf("[%03d + 2] Cannot create test file '%s'\n", $offset, $file); - return false; - } - - fclose($fp); - clearstatcache(); - if (!file_exists($file)) { - printf("[%03d + 3] Failed to create test file '%s'\n", $offset, $file); - return false; - } - - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label BLOB) ENGINE=%s', PDO_MYSQL_TEST_ENGINE); - $db->exec($sql); - - if (!$stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)')) { - printf("[%03d + 4] %s\n", $offset, var_export($db->errorInfo(), true)); - return false; - } - - $fp = fopen($file, 'r'); - if (!$fp) { - printf("[%03d + 5] Cannot create test file '%s'\n", $offset, $file); - return false; - } - - - $id = 1; - $stmt->bindParam(1, $id); - if (true !== ($tmp = $stmt->bindParam(2, $fp, PDO::PARAM_LOB))) { - printf("[%03d + 6] Expecting true, got %s. %s\n", - $offset, - var_export($tmp, true), - var_export($db->errorInfo(), true)); - return false; - } - - if (true !== $stmt->execute()) { - printf("[%03d + 7] Failed to INSERT data, %s\n", $offset, var_export($stmt->errorInfo(), true)); - return false; - } - - $stmt2 = $db->query('SELECT id, label FROM test WHERE id = 1'); - $row = $stmt2->fetch(PDO::FETCH_ASSOC); - if ($row['label'] != $blob) { - printf("[%03d + 8] INSERT and/or SELECT has failed, dumping data.\n", $offset); - var_dump($row); - var_dump($blob); - return false; - } - - // Lets test the chr(0) handling in case the streaming has failed: - // is the bug about chr(0) or the streaming... - $db->exec('DELETE FROM test'); - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); - $stmt->bindParam(1, $id); - $stmt->bindParam(2, $blob); - if (true !== $stmt->execute()) - printf("[%03d + 9] %s\n", $offset, var_export($stmt->errorInfo(), true)); - - $stmt2 = $db->query('SELECT id, label FROM test WHERE id = 1'); - $row = $stmt2->fetch(PDO::FETCH_ASSOC); - if ($row['label'] != $blob) { - printf("[%03d + 10] INSERT and/or SELECT has failed, dumping data.\n", $offset); - var_dump($row); - var_dump($blob); - return false; - } - - return true; - } - - $db = MySQLPDOTest::factory(); - $blob = 'I am a mighty BLOB!' . chr(0) . "I am a binary thingie!"; - $tmp = MySQLPDOTest::getTempDir(); - $file = $tmp . DIRECTORY_SEPARATOR . 'pdoblob.tst'; - - try { - - printf("Emulated PS...\n"); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - blob_from_stream(10, $db, $file, $blob); - - printf("Native PS...\n"); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - blob_from_stream(30, $db, $file, $blob); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + function blob_from_stream($offset, $db, $file, $blob) { + + @unlink($file); + clearstatcache(); + if (file_exists($file)) { + printf("[%03d + 1] Cannot remove old test file\n", $offset); + return false; + } + + $fp = fopen($file, 'w'); + if (!$fp || !fwrite($fp, $blob)) { + printf("[%03d + 2] Cannot create test file '%s'\n", $offset, $file); + return false; + } + + fclose($fp); + clearstatcache(); + if (!file_exists($file)) { + printf("[%03d + 3] Failed to create test file '%s'\n", $offset, $file); + return false; + } + + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label BLOB) ENGINE=%s', PDO_MYSQL_TEST_ENGINE); + $db->exec($sql); + + if (!$stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)')) { + printf("[%03d + 4] %s\n", $offset, var_export($db->errorInfo(), true)); + return false; + } + + $fp = fopen($file, 'r'); + if (!$fp) { + printf("[%03d + 5] Cannot create test file '%s'\n", $offset, $file); + return false; + } + + + $id = 1; + $stmt->bindParam(1, $id); + if (true !== ($tmp = $stmt->bindParam(2, $fp, PDO::PARAM_LOB))) { + printf("[%03d + 6] Expecting true, got %s. %s\n", + $offset, + var_export($tmp, true), + var_export($db->errorInfo(), true)); + return false; + } + + if (true !== $stmt->execute()) { + printf("[%03d + 7] Failed to INSERT data, %s\n", $offset, var_export($stmt->errorInfo(), true)); + return false; + } + + $stmt2 = $db->query('SELECT id, label FROM test WHERE id = 1'); + $row = $stmt2->fetch(PDO::FETCH_ASSOC); + if ($row['label'] != $blob) { + printf("[%03d + 8] INSERT and/or SELECT has failed, dumping data.\n", $offset); + var_dump($row); + var_dump($blob); + return false; + } + + // Lets test the chr(0) handling in case the streaming has failed: + // is the bug about chr(0) or the streaming... + $db->exec('DELETE FROM test'); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); + $stmt->bindParam(1, $id); + $stmt->bindParam(2, $blob); + if (true !== $stmt->execute()) + printf("[%03d + 9] %s\n", $offset, var_export($stmt->errorInfo(), true)); + + $stmt2 = $db->query('SELECT id, label FROM test WHERE id = 1'); + $row = $stmt2->fetch(PDO::FETCH_ASSOC); + if ($row['label'] != $blob) { + printf("[%03d + 10] INSERT and/or SELECT has failed, dumping data.\n", $offset); + var_dump($row); + var_dump($blob); + return false; + } + + return true; + } + + $db = MySQLPDOTest::factory(); + $blob = 'I am a mighty BLOB!' . chr(0) . "I am a binary thingie!"; + $tmp = MySQLPDOTest::getTempDir(); + $file = $tmp . DIRECTORY_SEPARATOR . 'pdoblob.tst'; + + try { + + printf("Emulated PS...\n"); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + blob_from_stream(10, $db, $file, $blob); + + printf("Native PS...\n"); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + blob_from_stream(30, $db, $file, $blob); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_blobs.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_blobs.phpt index a247de534e..9bdd03d7bd 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_blobs.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_blobs.phpt @@ -8,85 +8,85 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $blobs = array( - 'TINYBLOB' => 255, - 'TINYTEXT' => 255, - 'BLOB' => 32767, - 'TEXT' => 32767, - 'MEDIUMBLOB' => 100000, - 'MEDIUMTEXT' => 100000, - 'LONGBLOB' => 100000, - 'LONGTEXT' => 100000, - ); + $blobs = array( + 'TINYBLOB' => 255, + 'TINYTEXT' => 255, + 'BLOB' => 32767, + 'TEXT' => 32767, + 'MEDIUMBLOB' => 100000, + 'MEDIUMTEXT' => 100000, + 'LONGBLOB' => 100000, + 'LONGTEXT' => 100000, + ); - function test_blob($db, $offset, $sql_type, $test_len) { + function test_blob($db, $offset, $sql_type, $test_len) { - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, PDO_MYSQL_TEST_ENGINE)); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, PDO_MYSQL_TEST_ENGINE)); - $value = str_repeat('a', $test_len); - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); - $stmt->bindValue(1, 1); - $stmt->bindValue(2, $value); - if (!$stmt->execute()) { - printf("[%03d + 1] %d %s\n", - $offset, $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - return false; - } + $value = str_repeat('a', $test_len); + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); + $stmt->bindValue(1, 1); + $stmt->bindValue(2, $value); + if (!$stmt->execute()) { + printf("[%03d + 1] %d %s\n", + $offset, $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + return false; + } - $stmt = $db->query('SELECT id, label FROM test'); - $id = $label = NULL; - $stmt->bindColumn(1, $id, PDO::PARAM_INT); - $stmt->bindColumn(2, $label, PDO::PARAM_LOB); + $stmt = $db->query('SELECT id, label FROM test'); + $id = $label = NULL; + $stmt->bindColumn(1, $id, PDO::PARAM_INT); + $stmt->bindColumn(2, $label, PDO::PARAM_LOB); - if (!$stmt->fetch(PDO::FETCH_BOUND)) { - printf("[%03d + 2] %d %s\n", - $offset, $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - return false; - } + if (!$stmt->fetch(PDO::FETCH_BOUND)) { + printf("[%03d + 2] %d %s\n", + $offset, $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + return false; + } - if ($label !== $value) { - printf("[%03d + 3] Returned value seems to be wrong (%d vs. %d characters). Check manually\n", - $offset, strlen($label), strlen($value)); - return false; - } + if ($label !== $value) { + printf("[%03d + 3] Returned value seems to be wrong (%d vs. %d characters). Check manually\n", + $offset, strlen($label), strlen($value)); + return false; + } - if (1 != $id) { - printf("[%03d + 3] Returned id column value seems wrong, expecting 1 got %s.\n", - $offset, var_export($id, true)); - return false; - } + if (1 != $id) { + printf("[%03d + 3] Returned id column value seems wrong, expecting 1 got %s.\n", + $offset, var_export($id, true)); + return false; + } - $stmt = $db->query('SELECT id, label FROM test'); - $ret = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt = $db->query('SELECT id, label FROM test'); + $ret = $stmt->fetch(PDO::FETCH_ASSOC); - if ($ret['label'] !== $value) { - printf("[%03d + 3] Returned value seems to be wrong (%d vs. %d characters). Check manually\n", - $offset, strlen($ret['label']), strlen($value)); - return false; - } + if ($ret['label'] !== $value) { + printf("[%03d + 3] Returned value seems to be wrong (%d vs. %d characters). Check manually\n", + $offset, strlen($ret['label']), strlen($value)); + return false; + } - if (1 != $ret['id']) { - printf("[%03d + 3] Returned id column value seems wrong, expecting 1 got %s.\n", - $offset, var_export($ret['id'], true)); - return false; - } + if (1 != $ret['id']) { + printf("[%03d + 3] Returned id column value seems wrong, expecting 1 got %s.\n", + $offset, var_export($ret['id'], true)); + return false; + } - return true; - } + return true; + } - $offset = 0; - foreach ($blobs as $sql_type => $test_len) { - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - test_blob($db, ++$offset, $sql_type, $test_len); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - test_blob($db, ++$offset, $sql_type, $test_len); - } + $offset = 0; + foreach ($blobs as $sql_type => $test_len) { + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + test_blob($db, ++$offset, $sql_type, $test_len); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + test_blob($db, ++$offset, $sql_type, $test_len); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor.phpt index d0da7a8e16..4125155f6d 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor.phpt @@ -9,140 +9,140 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - /* TODO the results look wrong, why do we get 2014 with buffered AND unbuffered queries */ - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - function pdo_mysql_stmt_closecursor($db) { - - // This one should fail. I let it fail to prove that closeCursor() makes a difference. - // If no error messages gets printed do not know if proper usage of closeCursor() makes any - // difference or not. That's why we need to cause an error here. - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - // query() shall fail! - $stmt2 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - $stmt1->closeCursor(); - - // This is proper usage of closeCursor(). It shall prevent any further error messages. - if (MySQLPDOTest::isPDOMySQLnd()) { - $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - } else { - // see pdo_mysql_stmt_unbuffered_2050.phpt for an explanation - unset($stmt1); - $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - } - // fetch only the first rows and let closeCursor() clean up - $row1 = $stmt1->fetch(PDO::FETCH_ASSOC); - $stmt1->closeCursor(); - - $stmt2 = $db->prepare('UPDATE test SET label = ? WHERE id = ?'); - $stmt2->bindValue(1, "z"); - - $stmt2->bindValue(2, $row1['id']); - $stmt2->execute(); - $stmt2->closeCursor(); - - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - // check if changing the fetch mode from unbuffered to buffered will - // cause any harm to a statement created prior to the change - $stmt1->execute(); - $row2 = $stmt1->fetch(PDO::FETCH_ASSOC); - $stmt1->closeCursor(); - if (!isset($row2['label']) || ('z' !== $row2['label'])) - printf("Expecting array(id => 1, label => z) got %s\n", var_export($row2, true)); - unset($stmt1); - - $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - // should work - $stmt2 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - $stmt1->closeCursor(); - - $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); - // fetch only the first rows and let closeCursor() clean up - $row3 = $stmt1->fetch(PDO::FETCH_ASSOC); - $stmt1->closeCursor(); - assert($row3 == $row2); - - $stmt2 = $db->prepare('UPDATE test SET label = ? WHERE id = ?'); - $stmt2->bindValue(1, "a"); - $stmt2->bindValue(2, $row1['id']); - $stmt2->execute(); - $stmt2->closeCursor(); - - $stmt1->execute(); - $row4 = $stmt1->fetch(PDO::FETCH_ASSOC); - $stmt1->closeCursor(); - assert($row4 == $row1); - - $offset = 0; - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindParam(1, $in)) - printf("[%03d + 1] Cannot bind parameter, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - $stmt->execute(); - $id = $label = null; - - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[%03d + 2] Cannot bind integer column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); - - $stmt->closeCursor(); - $stmt->execute(); - - } - - - try { - - printf("Testing emulated PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); - - printf("Buffered...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - MySQLPDOTest::createTestTable($db); - pdo_mysql_stmt_closecursor($db); - - printf("Unbuffered...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - MySQLPDOTest::createTestTable($db); - pdo_mysql_stmt_closecursor($db); - - printf("Testing native PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); - - printf("Buffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - pdo_mysql_stmt_closecursor($db); - - printf("Unbuffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - pdo_mysql_stmt_closecursor($db); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + /* TODO the results look wrong, why do we get 2014 with buffered AND unbuffered queries */ + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + function pdo_mysql_stmt_closecursor($db) { + + // This one should fail. I let it fail to prove that closeCursor() makes a difference. + // If no error messages gets printed do not know if proper usage of closeCursor() makes any + // difference or not. That's why we need to cause an error here. + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + // query() shall fail! + $stmt2 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + $stmt1->closeCursor(); + + // This is proper usage of closeCursor(). It shall prevent any further error messages. + if (MySQLPDOTest::isPDOMySQLnd()) { + $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + } else { + // see pdo_mysql_stmt_unbuffered_2050.phpt for an explanation + unset($stmt1); + $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + } + // fetch only the first rows and let closeCursor() clean up + $row1 = $stmt1->fetch(PDO::FETCH_ASSOC); + $stmt1->closeCursor(); + + $stmt2 = $db->prepare('UPDATE test SET label = ? WHERE id = ?'); + $stmt2->bindValue(1, "z"); + + $stmt2->bindValue(2, $row1['id']); + $stmt2->execute(); + $stmt2->closeCursor(); + + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + // check if changing the fetch mode from unbuffered to buffered will + // cause any harm to a statement created prior to the change + $stmt1->execute(); + $row2 = $stmt1->fetch(PDO::FETCH_ASSOC); + $stmt1->closeCursor(); + if (!isset($row2['label']) || ('z' !== $row2['label'])) + printf("Expecting array(id => 1, label => z) got %s\n", var_export($row2, true)); + unset($stmt1); + + $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + // should work + $stmt2 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + $stmt1->closeCursor(); + + $stmt1 = $db->query('SELECT id, label FROM test ORDER BY id ASC'); + // fetch only the first rows and let closeCursor() clean up + $row3 = $stmt1->fetch(PDO::FETCH_ASSOC); + $stmt1->closeCursor(); + assert($row3 == $row2); + + $stmt2 = $db->prepare('UPDATE test SET label = ? WHERE id = ?'); + $stmt2->bindValue(1, "a"); + $stmt2->bindValue(2, $row1['id']); + $stmt2->execute(); + $stmt2->closeCursor(); + + $stmt1->execute(); + $row4 = $stmt1->fetch(PDO::FETCH_ASSOC); + $stmt1->closeCursor(); + assert($row4 == $row1); + + $offset = 0; + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindParam(1, $in)) + printf("[%03d + 1] Cannot bind parameter, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + $stmt->execute(); + $id = $label = null; + + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[%03d + 2] Cannot bind integer column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[%03d + 3] Cannot bind string column, %s %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); + + $stmt->closeCursor(); + $stmt->execute(); + + } + + + try { + + printf("Testing emulated PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); + + printf("Buffered...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + MySQLPDOTest::createTestTable($db); + pdo_mysql_stmt_closecursor($db); + + printf("Unbuffered...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + MySQLPDOTest::createTestTable($db); + pdo_mysql_stmt_closecursor($db); + + printf("Testing native PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); + + printf("Buffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + pdo_mysql_stmt_closecursor($db); + + printf("Unbuffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + pdo_mysql_stmt_closecursor($db); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor_empty.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor_empty.phpt index 77f663584a..e732ed5e34 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor_empty.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_closecursor_empty.phpt @@ -9,57 +9,57 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { + try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + MySQLPDOTest::createTestTable($db); - $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); - $in = 0; - if (!$stmt->bindParam(1, $in)) - printf("[003] Cannot bind parameter, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + $stmt = $db->prepare('SELECT id, label FROM test WHERE id > ? ORDER BY id ASC LIMIT 2'); + $in = 0; + if (!$stmt->bindParam(1, $in)) + printf("[003] Cannot bind parameter, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - $stmt->execute(); - $id = $label = null; + $stmt->execute(); + $id = $label = null; - if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) - printf("[004] Cannot bind integer column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(1, $id, PDO::PARAM_INT)) + printf("[004] Cannot bind integer column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) - printf("[005] Cannot bind string column, %s %s\n", - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + if (!$stmt->bindColumn(2, $label, PDO::PARAM_STR)) + printf("[005] Cannot bind string column, %s %s\n", + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); - $stmt->closeCursor(); - $stmt->execute(); - while ($stmt->fetch(PDO::FETCH_BOUND)) - printf("in = %d -> id = %s (%s) / label = %s (%s)\n", - $in, - var_export($id, true), gettype($id), - var_export($label, true), gettype($label)); + $stmt->closeCursor(); + $stmt->execute(); + while ($stmt->fetch(PDO::FETCH_BOUND)) + printf("in = %d -> id = %s (%s) / label = %s (%s)\n", + $in, + var_export($id, true), gettype($id), + var_export($label, true), gettype($label)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - $db->exec('DROP TABLE IF EXISTS test'); - print "done!"; + $db->exec('DROP TABLE IF EXISTS test'); + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_columncount.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_columncount.phpt index a701469ed1..2c4de9f87c 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_columncount.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_columncount.phpt @@ -9,50 +9,50 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - // The only purpose of this is to check if emulated and native PS + // The only purpose of this is to check if emulated and native PS // return the same. If it works for one, it should work for all. - // Internal data structures should be the same in both cases. - printf("Testing emulated PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); + // Internal data structures should be the same in both cases. + printf("Testing emulated PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); - $stmt = $db->prepare("SELECT id, label, '?' as foo FROM test"); - $stmt->execute(); - var_dump($stmt->columnCount()); + $stmt = $db->prepare("SELECT id, label, '?' as foo FROM test"); + $stmt->execute(); + var_dump($stmt->columnCount()); - $stmt = $db->query('SELECT * FROM test'); - var_dump($stmt->columnCount()); + $stmt = $db->query('SELECT * FROM test'); + var_dump($stmt->columnCount()); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - printf("Testing native PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn off emulated prepared statements\n"); + printf("Testing native PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare("SELECT id, label, '?' as foo, 'TODO - Stored Procedure' as bar FROM test"); - $stmt->execute(); - var_dump($stmt->columnCount()); + $stmt = $db->prepare("SELECT id, label, '?' as foo, 'TODO - Stored Procedure' as bar FROM test"); + $stmt->execute(); + var_dump($stmt->columnCount()); - $stmt = $db->query('SELECT * FROM test'); - var_dump($stmt->columnCount()); + $stmt = $db->query('SELECT * FROM test'); + var_dump($stmt->columnCount()); - } catch (PDOException $e) { - printf("[003] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[003] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt index f77ba60f75..cfd30a635d 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorcode.phpt @@ -9,43 +9,43 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - $db->exec('DROP TABLE IF EXISTS ihopeitdoesnotexist'); + $db->exec('DROP TABLE IF EXISTS ihopeitdoesnotexist'); - printf("Testing emulated PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); + printf("Testing emulated PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); - $stmt->execute(); - var_dump($stmt->errorCode()); + $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); + $stmt->execute(); + var_dump($stmt->errorCode()); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - printf("Testing native PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn off emulated prepared statements\n"); + printf("Testing native PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); - $stmt->execute(); - var_dump($stmt->errorCode()); + $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); + $stmt->execute(); + var_dump($stmt->errorCode()); - } catch (PDOException $e) { - printf("[003] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[003] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --EXPECTF-- Testing emulated PS... diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt index e9dbeab3a6..b876628e25 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_errorinfo.phpt @@ -9,55 +9,55 @@ $db = MySQLPDOTest::factory(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - printf("Testing emulated PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); + printf("Testing emulated PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); - var_dump($stmt->errorInfo()); - $stmt->execute(); - var_dump($stmt->errorInfo()); + $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); + var_dump($stmt->errorInfo()); + $stmt->execute(); + var_dump($stmt->errorInfo()); - MySQLPDOTest::createTestTable($db); - $stmt = $db->prepare('SELECT label FROM test ORDER BY id ASC LIMIT 1'); - $db->exec('DROP TABLE test'); - var_dump($stmt->execute()); - var_dump($stmt->errorInfo()); - var_dump($db->errorInfo()); + MySQLPDOTest::createTestTable($db); + $stmt = $db->prepare('SELECT label FROM test ORDER BY id ASC LIMIT 1'); + $db->exec('DROP TABLE test'); + var_dump($stmt->execute()); + var_dump($stmt->errorInfo()); + var_dump($db->errorInfo()); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); + } - printf("Testing native PS...\n"); - try { - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn off emulated prepared statements\n"); + printf("Testing native PS...\n"); + try { + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn off emulated prepared statements\n"); - $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); - var_dump($stmt); + $stmt = $db->prepare('SELECT id FROM ihopeitdoesnotexist ORDER BY id ASC'); + var_dump($stmt); - MySQLPDOTest::createTestTable($db); - $stmt = $db->prepare('SELECT label FROM test ORDER BY id ASC LIMIT 1'); - var_dump($stmt->errorInfo()); - $db->exec('DROP TABLE test'); - $stmt->execute(); - var_dump($stmt->errorInfo()); - var_dump($db->errorInfo()); + MySQLPDOTest::createTestTable($db); + $stmt = $db->prepare('SELECT label FROM test ORDER BY id ASC LIMIT 1'); + var_dump($stmt->errorInfo()); + $db->exec('DROP TABLE test'); + $stmt->execute(); + var_dump($stmt->errorInfo()); + var_dump($db->errorInfo()); - } catch (PDOException $e) { - printf("[003] %s [%s] %s\n", - $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); - } - print "done!"; + } catch (PDOException $e) { + printf("[003] %s [%s] %s\n", + $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); + } + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_non_select.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_non_select.phpt index 46ab4f911c..8e414a6c16 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_non_select.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_non_select.phpt @@ -8,179 +8,179 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - - try { - - // Emulated PS first - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); - if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn on emulated prepared statements\n"); - - if (!is_object($stmt = $db->query('DESCRIBE test id'))) - printf("[003] Emulated PS, DESCRIBE failed, %s\n", var_export($db->errorInfo(), true)); - - $describe = array(); - $valid = false; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - $describe[] = $row; - foreach ($row as $column => $value) - if (isset($row['field']) && ($row['field'] == 'id')) - $valid = true; - } - if (empty($describe)) - printf("[004] Emulated PS, DESCRIBE returned no results\n"); - else if (!$valid) - printf("[005] Emulated PS, DESCRIBE, returned data seems wrong, dumping %s\n", - var_export($describe, true)); - - if (!is_object($stmt = $db->query('SHOW ENGINES'))) - printf("[006] Emulated PS, SHOW failed, %s\n", var_export($db->errorInfo(), true)); - - $show = array(); - $valid = false; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - $show[] = $row; - foreach ($row as $column => $value) - // MyISAM engine should be part of _every_ MySQL today - if ($value == 'MyISAM') - $valid = true; - } - if (empty($show)) - printf("[007] Emulated PS, SHOW returned no results\n"); - else if (!$valid) - printf("[008] Emulated PS, SHOW data seems wrong, dumping %s\n", - var_export($show, true)); - - if (!is_object($stmt = $db->query("EXPLAIN SELECT id FROM test"))) - printf("[009] Emulated PS, EXPLAIN returned no results\n"); - - $explain = array(); - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) - $explain[] = $row; - - if (empty($explain)) - printf("[010] Emulated PS, EXPLAIN returned no results\n"); - - // And now native PS - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[011] Unable to turn off emulated prepared statements\n"); - - $native_support = 'no'; - if ($db->exec("PREPARE mystmt FROM 'DESCRIBE test id'")) { - $native_support = 'yes'; - $db->exec('DEALLOCATE PREPARE mystmt'); - } - - if (!is_object($stmt = $db->query('DESCRIBE test id'))) - printf("[012] Native PS (native support: %s), DESCRIBE failed, %s\n", - $native_support, - var_export($db->errorInfo(), true)); - - $describe_native = array(); - $valid = false; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - $describe_native[] = $row; - foreach ($row as $column => $value) - if (isset($row['field']) && ($row['field'] == 'id')) - $valid = true; - } - if (empty($describe_native)) - printf("[013] Native PS (native support: %s), DESCRIBE returned no results\n", - $native_support); - else if (!$valid) - printf("[014] Native PS (native support: %s), DESCRIBE, returned data seems wrong, dumping %s\n", - $native_support, - var_export($describe_native, true)); - - if ($describe != $describe_native) - printf("[015] Emulated and native PS (native support: %s) results of DESCRIBE differ: %s vs. %s\n", - $native_support, - var_export($describe, true), - var_export($describe_native, true)); - - - $native_support = 'no'; - if ($db->exec("PREPARE mystmt FROM 'SHOW ENGINES'")) { - $native_support = 'yes'; - $db->exec('DEALLOCATE PREPARE mystmt'); - } - - if (!is_object($stmt = $db->query('SHOW ENGINES'))) - printf("[016] Native PS (native support: %s), SHOW failed, %s\n", - $native_support, - var_export($db->errorInfo(), true)); - - $show_native = array(); - $valid = false; - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { - $show_native[] = $row; - foreach ($row as $column => $value) - // MyISAM engine should be part of _every_ MySQL today - if ($value == 'MyISAM') - $valid = true; - } - if (empty($show_native)) - printf("[017] Native PS (native support: %s), SHOW returned no results\n", - $native_support); - else if (!$valid) - printf("[018] Native PS (native support: %s), SHOW data seems wrong, dumping %s\n", - var_export($show_native, true)); - - if ($show != $show_native) - printf("Native PS (native support: %s) and emulated PS returned different data for SHOW: %s vs. %s\n", - $native_support, - var_export($show, true), - var_export($show_native, true)); - - $native_support = 'no'; - if ($db->exec("PREPARE mystmt FROM 'EXPLAIN SELECT id FROM test'")) { - $native_support = 'yes'; - $db->exec('DEALLOCATE PREPARE mystmt'); - } - - if (!is_object($stmt = $db->query("EXPLAIN SELECT id FROM test"))) - printf("[012] Native PS (native support: %s), EXPLAIN failed, %s\n", - $native_support, - var_export($db->errorInfo(), true)); - - $explain_native = array(); - while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) - $explain_native[] = $row; - - if (empty($explain_native)) - printf("[013] Native PS (native support: %s), EXPLAIN returned no results\n", - $native_support); - - if ($explain != $explain_native) - printf("Native PS (native support: %s) and emulated PS returned different data for EXPLAIN: %s vs. %s\n", - $native_support, - var_export($explain, true), - var_export($explain_native, true)); - - $stmt->execute(); - $explain_native = $stmt->fetchAll(PDO::FETCH_ASSOC); - if ($explain != $explain_native) - printf("Native PS (native support: %s) and emulated PS returned different data for EXPLAIN: %s vs. %s\n", - $native_support, - var_export($explain, true), - var_export($explain_native, true)); - - $stmt->execute(); - $stmt->execute(); - // libmysql needs this - otherwise we get a 2015 error - if (!MYSQLPDOTest::isPDOMySQLnd()) - $stmt->fetchAll(PDO::FETCH_ASSOC); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!\n"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + + try { + + // Emulated PS first + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 1); + if (1 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn on emulated prepared statements\n"); + + if (!is_object($stmt = $db->query('DESCRIBE test id'))) + printf("[003] Emulated PS, DESCRIBE failed, %s\n", var_export($db->errorInfo(), true)); + + $describe = array(); + $valid = false; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $describe[] = $row; + foreach ($row as $column => $value) + if (isset($row['field']) && ($row['field'] == 'id')) + $valid = true; + } + if (empty($describe)) + printf("[004] Emulated PS, DESCRIBE returned no results\n"); + else if (!$valid) + printf("[005] Emulated PS, DESCRIBE, returned data seems wrong, dumping %s\n", + var_export($describe, true)); + + if (!is_object($stmt = $db->query('SHOW ENGINES'))) + printf("[006] Emulated PS, SHOW failed, %s\n", var_export($db->errorInfo(), true)); + + $show = array(); + $valid = false; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $show[] = $row; + foreach ($row as $column => $value) + // MyISAM engine should be part of _every_ MySQL today + if ($value == 'MyISAM') + $valid = true; + } + if (empty($show)) + printf("[007] Emulated PS, SHOW returned no results\n"); + else if (!$valid) + printf("[008] Emulated PS, SHOW data seems wrong, dumping %s\n", + var_export($show, true)); + + if (!is_object($stmt = $db->query("EXPLAIN SELECT id FROM test"))) + printf("[009] Emulated PS, EXPLAIN returned no results\n"); + + $explain = array(); + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) + $explain[] = $row; + + if (empty($explain)) + printf("[010] Emulated PS, EXPLAIN returned no results\n"); + + // And now native PS + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[011] Unable to turn off emulated prepared statements\n"); + + $native_support = 'no'; + if ($db->exec("PREPARE mystmt FROM 'DESCRIBE test id'")) { + $native_support = 'yes'; + $db->exec('DEALLOCATE PREPARE mystmt'); + } + + if (!is_object($stmt = $db->query('DESCRIBE test id'))) + printf("[012] Native PS (native support: %s), DESCRIBE failed, %s\n", + $native_support, + var_export($db->errorInfo(), true)); + + $describe_native = array(); + $valid = false; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $describe_native[] = $row; + foreach ($row as $column => $value) + if (isset($row['field']) && ($row['field'] == 'id')) + $valid = true; + } + if (empty($describe_native)) + printf("[013] Native PS (native support: %s), DESCRIBE returned no results\n", + $native_support); + else if (!$valid) + printf("[014] Native PS (native support: %s), DESCRIBE, returned data seems wrong, dumping %s\n", + $native_support, + var_export($describe_native, true)); + + if ($describe != $describe_native) + printf("[015] Emulated and native PS (native support: %s) results of DESCRIBE differ: %s vs. %s\n", + $native_support, + var_export($describe, true), + var_export($describe_native, true)); + + + $native_support = 'no'; + if ($db->exec("PREPARE mystmt FROM 'SHOW ENGINES'")) { + $native_support = 'yes'; + $db->exec('DEALLOCATE PREPARE mystmt'); + } + + if (!is_object($stmt = $db->query('SHOW ENGINES'))) + printf("[016] Native PS (native support: %s), SHOW failed, %s\n", + $native_support, + var_export($db->errorInfo(), true)); + + $show_native = array(); + $valid = false; + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) { + $show_native[] = $row; + foreach ($row as $column => $value) + // MyISAM engine should be part of _every_ MySQL today + if ($value == 'MyISAM') + $valid = true; + } + if (empty($show_native)) + printf("[017] Native PS (native support: %s), SHOW returned no results\n", + $native_support); + else if (!$valid) + printf("[018] Native PS (native support: %s), SHOW data seems wrong, dumping %s\n", + var_export($show_native, true)); + + if ($show != $show_native) + printf("Native PS (native support: %s) and emulated PS returned different data for SHOW: %s vs. %s\n", + $native_support, + var_export($show, true), + var_export($show_native, true)); + + $native_support = 'no'; + if ($db->exec("PREPARE mystmt FROM 'EXPLAIN SELECT id FROM test'")) { + $native_support = 'yes'; + $db->exec('DEALLOCATE PREPARE mystmt'); + } + + if (!is_object($stmt = $db->query("EXPLAIN SELECT id FROM test"))) + printf("[012] Native PS (native support: %s), EXPLAIN failed, %s\n", + $native_support, + var_export($db->errorInfo(), true)); + + $explain_native = array(); + while ($row = $stmt->fetch(PDO::FETCH_ASSOC)) + $explain_native[] = $row; + + if (empty($explain_native)) + printf("[013] Native PS (native support: %s), EXPLAIN returned no results\n", + $native_support); + + if ($explain != $explain_native) + printf("Native PS (native support: %s) and emulated PS returned different data for EXPLAIN: %s vs. %s\n", + $native_support, + var_export($explain, true), + var_export($explain_native, true)); + + $stmt->execute(); + $explain_native = $stmt->fetchAll(PDO::FETCH_ASSOC); + if ($explain != $explain_native) + printf("Native PS (native support: %s) and emulated PS returned different data for EXPLAIN: %s vs. %s\n", + $native_support, + var_export($explain, true), + var_export($explain_native, true)); + + $stmt->execute(); + $stmt->execute(); + // libmysql needs this - otherwise we get a 2015 error + if (!MYSQLPDOTest::isPDOMySQLnd()) + $stmt->fetchAll(PDO::FETCH_ASSOC); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize.phpt index d0a889a6d4..d1c00f1aa3 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize.phpt @@ -8,110 +8,110 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { - - class myclass implements Serializable { - - private static $instance = null; - protected $myprotected = 'a protected property'; - - // Good old magic stuff - private function __construct($caller = NULL) { - printf("%s(%s)\n", __METHOD__, $caller); - } - - - public function __destruct() { - // printf("%s()\n", __METHOD__); - } - - public function __sleep() { - printf("%s()\n", __METHOD__); - } - - public function __wakeup() { - printf("%s()\n", __METHOD__); - } - - public function __call($method, $params) { - printf("%s(%s, %s)\n", __METHOD__, $method, var_export($params, true)); - } - - public function __set($prop, $value) { - printf("%s(%s, %s)\n", __METHOD__, $prop, var_export($value, true)); - $this->{$prop} = $value; - } - - public function __get($prop) { - printf("%s(%s)\n", __METHOD__, $prop); - return NULL; - } - - // Singleton - public static function singleton($caller) { - printf("%s(%s)\n", __METHOD__, $caller); - - if (!self::$instance) { - $c = __CLASS__; - self::$instance = new $c($caller); - } - return self::$instance; - } - - // Serializable - public function serialize() { - printf("%s()\n", __METHOD__); - return 'Data from serialize'; - } - - public function unserialize($data) { - printf("%s(%s)\n", __METHOD__, var_export($data, true)); - } - - } - - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[002] Unable to turn off emulated prepared statements\n"); - - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(id INT, myobj BLOB) ENGINE=%s', - MySQLPDOTest::getTableEngine())); - - printf("Creating an object, serializing it and writing it to DB...\n"); - $id = 1; - $obj = myclass::singleton('Creating object'); - $myobj = serialize($obj); - $stmt = $db->prepare('INSERT INTO test(id, myobj) VALUES (?, ?)'); - $stmt->bindValue(1, $id); - $stmt->bindValue(2, $myobj); - $stmt->execute(); - - printf("\nUnserializing the previously serialized object...\n"); - var_dump(unserialize($myobj)); - - printf("\nUsing PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE to fetch the object from DB and unserialize it...\n"); - $stmt = $db->prepare('SELECT myobj FROM test'); - $stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('PDO shall not call __construct()')); - $stmt->execute(); - var_dump($stmt->fetch()); - - printf("\nUsing PDO::FETCH_CLASS to fetch the object from DB and unserialize it...\n"); - $stmt = $db->prepare('SELECT myobj FROM test'); - $stmt->setFetchMode(PDO::FETCH_CLASS, 'myclass', array('PDO shall call __construct()')); - $stmt->execute(); - var_dump($stmt->fetch()); - - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + try { + + class myclass implements Serializable { + + private static $instance = null; + protected $myprotected = 'a protected property'; + + // Good old magic stuff + private function __construct($caller = NULL) { + printf("%s(%s)\n", __METHOD__, $caller); + } + + + public function __destruct() { + // printf("%s()\n", __METHOD__); + } + + public function __sleep() { + printf("%s()\n", __METHOD__); + } + + public function __wakeup() { + printf("%s()\n", __METHOD__); + } + + public function __call($method, $params) { + printf("%s(%s, %s)\n", __METHOD__, $method, var_export($params, true)); + } + + public function __set($prop, $value) { + printf("%s(%s, %s)\n", __METHOD__, $prop, var_export($value, true)); + $this->{$prop} = $value; + } + + public function __get($prop) { + printf("%s(%s)\n", __METHOD__, $prop); + return NULL; + } + + // Singleton + public static function singleton($caller) { + printf("%s(%s)\n", __METHOD__, $caller); + + if (!self::$instance) { + $c = __CLASS__; + self::$instance = new $c($caller); + } + return self::$instance; + } + + // Serializable + public function serialize() { + printf("%s()\n", __METHOD__); + return 'Data from serialize'; + } + + public function unserialize($data) { + printf("%s(%s)\n", __METHOD__, var_export($data, true)); + } + + } + + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[002] Unable to turn off emulated prepared statements\n"); + + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(id INT, myobj BLOB) ENGINE=%s', + MySQLPDOTest::getTableEngine())); + + printf("Creating an object, serializing it and writing it to DB...\n"); + $id = 1; + $obj = myclass::singleton('Creating object'); + $myobj = serialize($obj); + $stmt = $db->prepare('INSERT INTO test(id, myobj) VALUES (?, ?)'); + $stmt->bindValue(1, $id); + $stmt->bindValue(2, $myobj); + $stmt->execute(); + + printf("\nUnserializing the previously serialized object...\n"); + var_dump(unserialize($myobj)); + + printf("\nUsing PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE to fetch the object from DB and unserialize it...\n"); + $stmt = $db->prepare('SELECT myobj FROM test'); + $stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('PDO shall not call __construct()')); + $stmt->execute(); + var_dump($stmt->fetch()); + + printf("\nUsing PDO::FETCH_CLASS to fetch the object from DB and unserialize it...\n"); + $stmt = $db->prepare('SELECT myobj FROM test'); + $stmt->setFetchMode(PDO::FETCH_CLASS, 'myclass', array('PDO shall call __construct()')); + $stmt->execute(); + var_dump($stmt->fetch()); + + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!\n"; + print "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize_simple.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize_simple.phpt index bfc907dbcb..07c9205796 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize_simple.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetch_serialize_simple.phpt @@ -8,65 +8,65 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); - try { + try { - class myclass implements Serializable { + class myclass implements Serializable { - public function __construct($caller = null) { - printf("%s(%s) - note that it must not be called when unserializing\n", __METHOD__, var_export($caller, true)); - } + public function __construct($caller = null) { + printf("%s(%s) - note that it must not be called when unserializing\n", __METHOD__, var_export($caller, true)); + } - public function __set($prop, $value) { - printf("%s(%s, %s)\n", __METHOD__, var_export($prop, true), var_export($value, true)); - $this->{$prop} = $value; - } + public function __set($prop, $value) { + printf("%s(%s, %s)\n", __METHOD__, var_export($prop, true), var_export($value, true)); + $this->{$prop} = $value; + } - public function serialize() { - printf("%s()\n", __METHOD__); - return 'Value from serialize()'; - } + public function serialize() { + printf("%s()\n", __METHOD__); + return 'Value from serialize()'; + } - public function unserialize($data) { - printf("%s(%s)\n", __METHOD__, var_export($data, true)); - } + public function unserialize($data) { + printf("%s(%s)\n", __METHOD__, var_export($data, true)); + } - } + } - printf("Lets see what the Serializeable interface makes our object behave like...\n"); - $obj = new myclass('Called by script'); - $tmp = unserialize(serialize($obj)); - var_dump($tmp); + printf("Lets see what the Serializeable interface makes our object behave like...\n"); + $obj = new myclass('Called by script'); + $tmp = unserialize(serialize($obj)); + var_dump($tmp); - printf("\nAnd now magic PDO using fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE)...\n"); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec(sprintf('CREATE TABLE test(myobj BLOB) ENGINE=%s', MySQLPDOTest::getTableEngine())); - $db->exec("INSERT INTO test(myobj) VALUES ('Data fetched from DB to be given to unserialize()')"); + printf("\nAnd now magic PDO using fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE)...\n"); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec(sprintf('CREATE TABLE test(myobj BLOB) ENGINE=%s', MySQLPDOTest::getTableEngine())); + $db->exec("INSERT INTO test(myobj) VALUES ('Data fetched from DB to be given to unserialize()')"); - $stmt = $db->prepare('SELECT myobj FROM test'); - $stmt->execute(); - $rows = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('Called by PDO')); - var_dump($rows[0]); + $stmt = $db->prepare('SELECT myobj FROM test'); + $stmt->execute(); + $rows = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('Called by PDO')); + var_dump($rows[0]); - $stmt->execute(); - $rows = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass'); - var_dump($rows[0]); + $stmt->execute(); + $rows = $stmt->fetchAll(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass'); + var_dump($rows[0]); - printf("\nAnd now PDO using setFetchMode(PDO::FETCH:CLASS|PDO::FETCH_SERIALIZE) + fetch()...\n"); - $stmt = $db->prepare('SELECT myobj FROM test'); - $stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('Called by PDO')); - $stmt->execute(); - var_dump($stmt->fetch()); + printf("\nAnd now PDO using setFetchMode(PDO::FETCH:CLASS|PDO::FETCH_SERIALIZE) + fetch()...\n"); + $stmt = $db->prepare('SELECT myobj FROM test'); + $stmt->setFetchMode(PDO::FETCH_CLASS|PDO::FETCH_SERIALIZE, 'myclass', array('Called by PDO')); + $stmt->execute(); + var_dump($stmt->fetch()); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - $db->exec('DROP TABLE IF EXISTS test'); - print "done!\n"; + $db->exec('DROP TABLE IF EXISTS test'); + print "done!\n"; ?> --EXPECTF-- Lets see what the Serializeable interface makes our object behave like... diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt index ae14c056f3..9760682358 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_fetchobject.phpt @@ -25,52 +25,52 @@ MySQLPDOTest::createTestTable($db); try { - $query = "SELECT id, '', NULL, \"\" FROM test ORDER BY id ASC LIMIT 3"; - $stmt = $db->prepare($query); + $query = "SELECT id, '', NULL, \"\" FROM test ORDER BY id ASC LIMIT 3"; + $stmt = $db->prepare($query); - class myclass { + class myclass { - private $set_calls = 0; - protected static $static_set_calls = 0; + private $set_calls = 0; + protected static $static_set_calls = 0; - // NOTE: PDO does not care about protected - protected $grp; + // NOTE: PDO does not care about protected + protected $grp; - // NOTE: PDO does not care about private and calls __construct() after __set() - private function __construct($param1, $param2) { - printf("myclass::__construct(%s, %s): %d / %d\n", - $param1, $param2, - self::$static_set_calls, $this->set_calls); - } + // NOTE: PDO does not care about private and calls __construct() after __set() + private function __construct($param1, $param2) { + printf("myclass::__construct(%s, %s): %d / %d\n", + $param1, $param2, + self::$static_set_calls, $this->set_calls); + } - // NOTE: PDO will call __set() prior to calling __construct() - public function __set($prop, $value) { - $this->not_a_magic_one(); - printf("myclass::__set(%s, -%s-) %d\n", - $prop, var_export($value, true), $this->set_calls, self::$static_set_calls); - if ("" != $prop) - $this->{$prop} = $value; - } + // NOTE: PDO will call __set() prior to calling __construct() + public function __set($prop, $value) { + $this->not_a_magic_one(); + printf("myclass::__set(%s, -%s-) %d\n", + $prop, var_export($value, true), $this->set_calls, self::$static_set_calls); + if ("" != $prop) + $this->{$prop} = $value; + } - // NOTE: PDO can call regular methods prior to calling __construct() - public function not_a_magic_one() { - $this->set_calls++; - self::$static_set_calls++; - } + // NOTE: PDO can call regular methods prior to calling __construct() + public function not_a_magic_one() { + $this->set_calls++; + self::$static_set_calls++; + } - } - $stmt->execute(); - $rowno = 0; - $rows[] = array(); - while (is_object($rows[] = $stmt->fetchObject('myclass', array($rowno++, $rowno)))) - ; + } + $stmt->execute(); + $rowno = 0; + $rows[] = array(); + while (is_object($rows[] = $stmt->fetchObject('myclass', array($rowno++, $rowno)))) + ; - var_dump($rows[$rowno - 1]); + var_dump($rows[$rowno - 1]); } catch (PDOException $e) { - // we should never get here, we use warnings, but never trust a system... - printf("[001] %s, [%s} %s\n", - $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); + // we should never get here, we use warnings, but never trust a system... + printf("[001] %s, [%s} %s\n", + $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); } print "done!"; diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt index 5ac683ea48..3526b35c24 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_getcolumnmeta.phpt @@ -22,277 +22,277 @@ MySQLPDOTest::createTestTable($db); try { - $stmt = $db->prepare('SELECT id FROM test ORDER BY id ASC'); - - // execute() has not been called yet - // NOTE: no warning - if (false !== ($tmp = $stmt->getColumnMeta(0))) - printf("[002] Expecting false got %s\n", var_export($tmp, true)); - - $stmt->execute(); - - // invalid offset - if (false !== ($tmp = @$stmt->getColumnMeta(-1))) - printf("[004] Expecting false got %s\n", var_export($tmp, true)); - - $emulated = $stmt->getColumnMeta(0); - - printf("Testing native PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[007] Unable to turn off emulated prepared statements\n"); - - $stmt = $db->prepare('SELECT id FROM test ORDER BY id ASC'); - $stmt->execute(); - $native = $stmt->getColumnMeta(0); - if (count($native) == 0) { - printf("[008] Meta data seems wrong, %s / %s\n", - var_export($native, true), var_export($emulated, true)); - } - - // invalid offset - if (false !== ($tmp = $stmt->getColumnMeta(1))) - printf("[009] Expecting false because of invalid offset got %s\n", var_export($tmp, true)); - - - function test_meta(&$db, $offset, $sql_type, $value, $native_type, $pdo_type) { - - $db->exec('DROP TABLE IF EXISTS test'); - - $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); - if (!($stmt = @$db->prepare($sql)) || (!@$stmt->execute())) { - // Some engines and/or MySQL server versions might not support the data type - return true; - } - - if (!$db->exec(sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $value))) { - printf("[%03d] + 1] Insert failed, %d - %s\n", $offset, - $db->errorCode(), var_export($db->errorInfo(), true)); - return false; - } - - $stmt = $db->prepare('SELECT id, label FROM test'); - $stmt->execute(); - $meta = $stmt->getColumnMeta(1); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - - if (empty($meta)) { - printf("[%03d + 2] getColumnMeta() failed, %d - %s\n", $offset, - $stmt->errorCode(), var_export($stmt->errorInfo(), true)); - return false; - } - - $elements = array('flags', 'table', 'name', 'len', 'precision', 'pdo_type'); - foreach ($elements as $k => $element) - if (!isset($meta[$element])) { - printf("[%03d + 3] Element %s missing, %s\n", $offset, - $element, var_export($meta, true)); - return false; - } - - if (($meta['table'] != 'test') || ($meta['name'] != 'label')) { - printf("[%03d + 4] Table or field name is wrong, %s\n", $offset, - var_export($meta, true)); - return false; - } - - if (!is_null($native_type)) { - if (!isset($meta['native_type'])) { - printf("[%03d + 5] Element native_type missing, %s\n", $offset, - var_export($meta, true)); - return false; - } - - if (!is_array($native_type)) - $native_type = array($native_type); - - $found = false; - foreach ($native_type as $k => $type) { - if ($meta['native_type'] == $type) { - $found = true; - break; - } - } - - if (!$found) { - printf("[%03d + 6] Expecting native type %s, %s\n", $offset, - var_export($native_type, true), var_export($meta, true)); - return false; - } - } - - if (!is_null($pdo_type) && ($meta['pdo_type'] != $pdo_type)) { - printf("[%03d + 6] Expecting PDO type %s got %s (%s)\n", $offset, - $pdo_type, var_export($meta, true), var_export($meta['native_type'])); - return false; - } - - return true; - } - - $stmt = $db->prepare('SELECT @@sql_mode AS _mode'); - $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $real_as_float = (false === stristr($row['_mode'], "REAL_AS_FLOAT")) ? false : true; - - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); - $is_mysqlnd = MySQLPDOTest::isPDOMySQLnd(); - test_meta($db, 20, 'BIT(8)', 1, 'BIT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 30, 'TINYINT', -127, 'TINY', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 40, 'TINYINT UNSIGNED', 255, 'TINY', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 50, 'BOOLEAN', 1, NULL, ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - - test_meta($db, 60, 'SMALLINT', -32768, 'SHORT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 70, 'SMALLINT UNSIGNED', 65535, 'SHORT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - - test_meta($db, 80, 'MEDIUMINT', -8388608, 'INT24', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 90, 'MEDIUMINT UNSIGNED', 16777215, 'INT24', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - - test_meta($db, 100, 'INT', -2147483648, 'LONG', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - test_meta($db, 110, 'INT UNSIGNED', 4294967295, 'LONG', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - - test_meta($db, 120, 'BIGINT', '-9223372036854775808', 'LONGLONG', ($is_mysqlnd) ? ((PHP_INT_SIZE == 4) ? PDO::PARAM_STR : PDO::PARAM_INT) : PDO::PARAM_STR); - test_meta($db, 130, 'BIGINT UNSIGNED', '18446744073709551615', 'LONGLONG', ($is_mysqlnd) ? ((PHP_INT_SIZE == 4) ? PDO::PARAM_STR : PDO::PARAM_INT) : PDO::PARAM_STR); - - test_meta($db, 130, 'REAL', -1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 140, 'REAL UNSIGNED', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 150, 'REAL ZEROFILL', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 160, 'REAL UNSIGNED ZEROFILL', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); - - test_meta($db, 170, 'DOUBLE', -1.01, 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 180, 'DOUBLE UNSIGNED', 1.01, 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 190, 'DOUBLE ZEROFILL', 1.01, 'DOUBLE', PDO::PARAM_STR); - test_meta($db, 200, 'DOUBLE UNSIGNED ZEROFILL', 1.01, 'DOUBLE', PDO::PARAM_STR); - - test_meta($db, 210, 'FLOAT', -1.01, 'FLOAT', PDO::PARAM_STR); - test_meta($db, 220, 'FLOAT UNSIGNED', 1.01, 'FLOAT', PDO::PARAM_STR); - test_meta($db, 230, 'FLOAT ZEROFILL', 1.01, 'FLOAT', PDO::PARAM_STR); - test_meta($db, 240, 'FLOAT UNSIGNED ZEROFILL', 1.01, 'FLOAT', PDO::PARAM_STR); - - test_meta($db, 250, 'DECIMAL', -1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 260, 'DECIMAL UNSIGNED', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 270, 'DECIMAL ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 280, 'DECIMAL UNSIGNED ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - - test_meta($db, 290, 'NUMERIC', -1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 300, 'NUMERIC UNSIGNED', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 310, 'NUMERIC ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - test_meta($db, 320, 'NUMERIC UNSIGNED ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); - - test_meta($db, 330, 'DATE', '2008-04-23', array('DATE', 'NEWDATE'), PDO::PARAM_STR); - test_meta($db, 340, 'TIME', '14:37:00', 'TIME', PDO::PARAM_STR); - test_meta($db, 350, 'TIMESTAMP', '2008-03-23 14:38:00', 'TIMESTAMP', PDO::PARAM_STR); - test_meta($db, 360, 'DATETIME', '2008-03-23 14:38:00', 'DATETIME', PDO::PARAM_STR); - test_meta($db, 370, 'YEAR', '2008', 'YEAR', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); - - test_meta($db, 380, 'CHAR(1)', 'a', 'STRING', PDO::PARAM_STR); - test_meta($db, 390, 'CHAR(10)', '0123456789', 'STRING', PDO::PARAM_STR); - test_meta($db, 400, 'CHAR(255)', str_repeat('z', 255), 'STRING', PDO::PARAM_STR); - test_meta($db, 410, 'VARCHAR(1)', 'a', 'VAR_STRING', PDO::PARAM_STR); - test_meta($db, 420, 'VARCHAR(10)', '0123456789', 'VAR_STRING', PDO::PARAM_STR); - test_meta($db, 430, 'VARCHAR(255)', str_repeat('z', 255), 'VAR_STRING', PDO::PARAM_STR); - - test_meta($db, 440, 'BINARY(1)', str_repeat('a', 1), 'STRING', PDO::PARAM_STR); - test_meta($db, 450, 'BINARY(255)', str_repeat('b', 255), 'STRING', PDO::PARAM_STR); - test_meta($db, 460, 'VARBINARY(1)', str_repeat('a', 1), 'VAR_STRING', PDO::PARAM_STR); - test_meta($db, 470, 'VARBINARY(255)', str_repeat('b', 255), 'VAR_STRING', PDO::PARAM_STR); - - test_meta($db, 480, 'TINYBLOB', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); - test_meta($db, 490, 'BLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - test_meta($db, 500, 'MEDIUMBLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - test_meta($db, 510, 'LONGBLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - - test_meta($db, 520, 'TINYTEXT', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); - test_meta($db, 530, 'TINYTEXT BINARY', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); - - test_meta($db, 560, 'TEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - test_meta($db, 570, 'TEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - - test_meta($db, 580, 'MEDIUMTEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - test_meta($db, 590, 'MEDIUMTEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - - test_meta($db, 600, 'LONGTEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - test_meta($db, 610, 'LONGTEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); - - test_meta($db, 620, "ENUM('yes', 'no') DEFAULT 'yes'", 'no', NULL, PDO::PARAM_STR); - test_meta($db, 630, "SET('yes', 'no') DEFAULT 'yes'", 'no', NULL, PDO::PARAM_STR); + $stmt = $db->prepare('SELECT id FROM test ORDER BY id ASC'); + + // execute() has not been called yet + // NOTE: no warning + if (false !== ($tmp = $stmt->getColumnMeta(0))) + printf("[002] Expecting false got %s\n", var_export($tmp, true)); + + $stmt->execute(); + + // invalid offset + if (false !== ($tmp = @$stmt->getColumnMeta(-1))) + printf("[004] Expecting false got %s\n", var_export($tmp, true)); + + $emulated = $stmt->getColumnMeta(0); + + printf("Testing native PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[007] Unable to turn off emulated prepared statements\n"); + + $stmt = $db->prepare('SELECT id FROM test ORDER BY id ASC'); + $stmt->execute(); + $native = $stmt->getColumnMeta(0); + if (count($native) == 0) { + printf("[008] Meta data seems wrong, %s / %s\n", + var_export($native, true), var_export($emulated, true)); + } + + // invalid offset + if (false !== ($tmp = $stmt->getColumnMeta(1))) + printf("[009] Expecting false because of invalid offset got %s\n", var_export($tmp, true)); + + + function test_meta(&$db, $offset, $sql_type, $value, $native_type, $pdo_type) { + + $db->exec('DROP TABLE IF EXISTS test'); + + $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); + if (!($stmt = @$db->prepare($sql)) || (!@$stmt->execute())) { + // Some engines and/or MySQL server versions might not support the data type + return true; + } + + if (!$db->exec(sprintf("INSERT INTO test(id, label) VALUES (1, '%s')", $value))) { + printf("[%03d] + 1] Insert failed, %d - %s\n", $offset, + $db->errorCode(), var_export($db->errorInfo(), true)); + return false; + } + + $stmt = $db->prepare('SELECT id, label FROM test'); + $stmt->execute(); + $meta = $stmt->getColumnMeta(1); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + + if (empty($meta)) { + printf("[%03d + 2] getColumnMeta() failed, %d - %s\n", $offset, + $stmt->errorCode(), var_export($stmt->errorInfo(), true)); + return false; + } + + $elements = array('flags', 'table', 'name', 'len', 'precision', 'pdo_type'); + foreach ($elements as $k => $element) + if (!isset($meta[$element])) { + printf("[%03d + 3] Element %s missing, %s\n", $offset, + $element, var_export($meta, true)); + return false; + } + + if (($meta['table'] != 'test') || ($meta['name'] != 'label')) { + printf("[%03d + 4] Table or field name is wrong, %s\n", $offset, + var_export($meta, true)); + return false; + } + + if (!is_null($native_type)) { + if (!isset($meta['native_type'])) { + printf("[%03d + 5] Element native_type missing, %s\n", $offset, + var_export($meta, true)); + return false; + } + + if (!is_array($native_type)) + $native_type = array($native_type); + + $found = false; + foreach ($native_type as $k => $type) { + if ($meta['native_type'] == $type) { + $found = true; + break; + } + } + + if (!$found) { + printf("[%03d + 6] Expecting native type %s, %s\n", $offset, + var_export($native_type, true), var_export($meta, true)); + return false; + } + } + + if (!is_null($pdo_type) && ($meta['pdo_type'] != $pdo_type)) { + printf("[%03d + 6] Expecting PDO type %s got %s (%s)\n", $offset, + $pdo_type, var_export($meta, true), var_export($meta['native_type'])); + return false; + } + + return true; + } + + $stmt = $db->prepare('SELECT @@sql_mode AS _mode'); + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $real_as_float = (false === stristr($row['_mode'], "REAL_AS_FLOAT")) ? false : true; + + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + $is_mysqlnd = MySQLPDOTest::isPDOMySQLnd(); + test_meta($db, 20, 'BIT(8)', 1, 'BIT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 30, 'TINYINT', -127, 'TINY', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 40, 'TINYINT UNSIGNED', 255, 'TINY', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 50, 'BOOLEAN', 1, NULL, ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + + test_meta($db, 60, 'SMALLINT', -32768, 'SHORT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 70, 'SMALLINT UNSIGNED', 65535, 'SHORT', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + + test_meta($db, 80, 'MEDIUMINT', -8388608, 'INT24', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 90, 'MEDIUMINT UNSIGNED', 16777215, 'INT24', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + + test_meta($db, 100, 'INT', -2147483648, 'LONG', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + test_meta($db, 110, 'INT UNSIGNED', 4294967295, 'LONG', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + + test_meta($db, 120, 'BIGINT', '-9223372036854775808', 'LONGLONG', ($is_mysqlnd) ? ((PHP_INT_SIZE == 4) ? PDO::PARAM_STR : PDO::PARAM_INT) : PDO::PARAM_STR); + test_meta($db, 130, 'BIGINT UNSIGNED', '18446744073709551615', 'LONGLONG', ($is_mysqlnd) ? ((PHP_INT_SIZE == 4) ? PDO::PARAM_STR : PDO::PARAM_INT) : PDO::PARAM_STR); + + test_meta($db, 130, 'REAL', -1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 140, 'REAL UNSIGNED', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 150, 'REAL ZEROFILL', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 160, 'REAL UNSIGNED ZEROFILL', 1.01, ($real_as_float) ? 'FLOAT' : 'DOUBLE', PDO::PARAM_STR); + + test_meta($db, 170, 'DOUBLE', -1.01, 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 180, 'DOUBLE UNSIGNED', 1.01, 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 190, 'DOUBLE ZEROFILL', 1.01, 'DOUBLE', PDO::PARAM_STR); + test_meta($db, 200, 'DOUBLE UNSIGNED ZEROFILL', 1.01, 'DOUBLE', PDO::PARAM_STR); + + test_meta($db, 210, 'FLOAT', -1.01, 'FLOAT', PDO::PARAM_STR); + test_meta($db, 220, 'FLOAT UNSIGNED', 1.01, 'FLOAT', PDO::PARAM_STR); + test_meta($db, 230, 'FLOAT ZEROFILL', 1.01, 'FLOAT', PDO::PARAM_STR); + test_meta($db, 240, 'FLOAT UNSIGNED ZEROFILL', 1.01, 'FLOAT', PDO::PARAM_STR); + + test_meta($db, 250, 'DECIMAL', -1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 260, 'DECIMAL UNSIGNED', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 270, 'DECIMAL ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 280, 'DECIMAL UNSIGNED ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + + test_meta($db, 290, 'NUMERIC', -1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 300, 'NUMERIC UNSIGNED', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 310, 'NUMERIC ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + test_meta($db, 320, 'NUMERIC UNSIGNED ZEROFILL', 1.01, array('DECIMAL', 'NEWDECIMAL'), PDO::PARAM_STR); + + test_meta($db, 330, 'DATE', '2008-04-23', array('DATE', 'NEWDATE'), PDO::PARAM_STR); + test_meta($db, 340, 'TIME', '14:37:00', 'TIME', PDO::PARAM_STR); + test_meta($db, 350, 'TIMESTAMP', '2008-03-23 14:38:00', 'TIMESTAMP', PDO::PARAM_STR); + test_meta($db, 360, 'DATETIME', '2008-03-23 14:38:00', 'DATETIME', PDO::PARAM_STR); + test_meta($db, 370, 'YEAR', '2008', 'YEAR', ($is_mysqlnd) ? PDO::PARAM_INT : PDO::PARAM_STR); + + test_meta($db, 380, 'CHAR(1)', 'a', 'STRING', PDO::PARAM_STR); + test_meta($db, 390, 'CHAR(10)', '0123456789', 'STRING', PDO::PARAM_STR); + test_meta($db, 400, 'CHAR(255)', str_repeat('z', 255), 'STRING', PDO::PARAM_STR); + test_meta($db, 410, 'VARCHAR(1)', 'a', 'VAR_STRING', PDO::PARAM_STR); + test_meta($db, 420, 'VARCHAR(10)', '0123456789', 'VAR_STRING', PDO::PARAM_STR); + test_meta($db, 430, 'VARCHAR(255)', str_repeat('z', 255), 'VAR_STRING', PDO::PARAM_STR); + + test_meta($db, 440, 'BINARY(1)', str_repeat('a', 1), 'STRING', PDO::PARAM_STR); + test_meta($db, 450, 'BINARY(255)', str_repeat('b', 255), 'STRING', PDO::PARAM_STR); + test_meta($db, 460, 'VARBINARY(1)', str_repeat('a', 1), 'VAR_STRING', PDO::PARAM_STR); + test_meta($db, 470, 'VARBINARY(255)', str_repeat('b', 255), 'VAR_STRING', PDO::PARAM_STR); + + test_meta($db, 480, 'TINYBLOB', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); + test_meta($db, 490, 'BLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + test_meta($db, 500, 'MEDIUMBLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + test_meta($db, 510, 'LONGBLOB', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + + test_meta($db, 520, 'TINYTEXT', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); + test_meta($db, 530, 'TINYTEXT BINARY', str_repeat('b', 255), 'BLOB', PDO::PARAM_STR); + + test_meta($db, 560, 'TEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + test_meta($db, 570, 'TEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + + test_meta($db, 580, 'MEDIUMTEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + test_meta($db, 590, 'MEDIUMTEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + + test_meta($db, 600, 'LONGTEXT', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + test_meta($db, 610, 'LONGTEXT BINARY', str_repeat('b', 256), 'BLOB', PDO::PARAM_STR); + + test_meta($db, 620, "ENUM('yes', 'no') DEFAULT 'yes'", 'no', NULL, PDO::PARAM_STR); + test_meta($db, 630, "SET('yes', 'no') DEFAULT 'yes'", 'no', NULL, PDO::PARAM_STR); /* | spatial_type */ - // unique key - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label INT UNIQUE) ENGINE = %s', MySQLPDOTest::getTableEngine()); - if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { - $db->exec('INSERT INTO test(id, label) VALUES (1, 2)'); - $stmt = $db->query('SELECT id, label FROM test'); - $meta = $stmt->getColumnMeta(1); - if (!isset($meta['flags'])) { - printf("[1000] No flags contained in metadata %s\n", var_export($meta, true)); - } else { - $flags = $meta['flags']; - $found = false; - foreach ($flags as $k => $flag) { - if ($flag == 'unique_key') - $found = true; - } - if (!$found) - printf("[1001] Flags seem wrong %s\n", var_export($meta, true)); - } - } - - // primary key - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT) ENGINE = %s', MySQLPDOTest::getTableEngine()); - if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { - $db->exec('INSERT INTO test(id) VALUES (1)'); - $stmt = $db->query('SELECT id FROM test'); - $meta = $stmt->getColumnMeta(0); - if (!isset($meta['flags'])) { - printf("[1002] No flags contained in metadata %s\n", var_export($meta, true)); - } else { - $flags = $meta['flags']; - $found = false; - foreach ($flags as $k => $flag) { - if ($flag == 'primary_key') - $found = true; - } - if (!$found) - printf("[1003] Flags seem wrong %s\n", var_export($meta, true)); - } - } - - // multiple key - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label1 INT, label2 INT, INDEX idx1(label1, label2)) ENGINE = %s', MySQLPDOTest::getTableEngine()); - if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { - $db->exec('INSERT INTO test(id, label1, label2) VALUES (1, 2, 3)'); - $stmt = $db->query('SELECT id, label1, label2 FROM test'); - $meta = $stmt->getColumnMeta(1); - if (!isset($meta['flags'])) { - printf("[1004] No flags contained in metadata %s\n", var_export($meta, true)); - } else { - $flags = $meta['flags']; - $found = false; - foreach ($flags as $k => $flag) { - if ($flag == 'multiple_key') - $found = true; - } - if (!$found) - printf("[1005] Flags seem wrong %s\n", var_export($meta, true)); - } - } - - $stmt = $db->query('SELECT NULL AS col1'); - $meta = $stmt->getColumnMeta(0); - if ('NULL' !== $meta['native_type']) - printf("[1006] Expecting NULL got %s\n", $meta['native_type']); + // unique key + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label INT UNIQUE) ENGINE = %s', MySQLPDOTest::getTableEngine()); + if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { + $db->exec('INSERT INTO test(id, label) VALUES (1, 2)'); + $stmt = $db->query('SELECT id, label FROM test'); + $meta = $stmt->getColumnMeta(1); + if (!isset($meta['flags'])) { + printf("[1000] No flags contained in metadata %s\n", var_export($meta, true)); + } else { + $flags = $meta['flags']; + $found = false; + foreach ($flags as $k => $flag) { + if ($flag == 'unique_key') + $found = true; + } + if (!$found) + printf("[1001] Flags seem wrong %s\n", var_export($meta, true)); + } + } + + // primary key + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT PRIMARY KEY NOT NULL AUTO_INCREMENT) ENGINE = %s', MySQLPDOTest::getTableEngine()); + if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { + $db->exec('INSERT INTO test(id) VALUES (1)'); + $stmt = $db->query('SELECT id FROM test'); + $meta = $stmt->getColumnMeta(0); + if (!isset($meta['flags'])) { + printf("[1002] No flags contained in metadata %s\n", var_export($meta, true)); + } else { + $flags = $meta['flags']; + $found = false; + foreach ($flags as $k => $flag) { + if ($flag == 'primary_key') + $found = true; + } + if (!$found) + printf("[1003] Flags seem wrong %s\n", var_export($meta, true)); + } + } + + // multiple key + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label1 INT, label2 INT, INDEX idx1(label1, label2)) ENGINE = %s', MySQLPDOTest::getTableEngine()); + if (($stmt = @$db->prepare($sql)) && @$stmt->execute()) { + $db->exec('INSERT INTO test(id, label1, label2) VALUES (1, 2, 3)'); + $stmt = $db->query('SELECT id, label1, label2 FROM test'); + $meta = $stmt->getColumnMeta(1); + if (!isset($meta['flags'])) { + printf("[1004] No flags contained in metadata %s\n", var_export($meta, true)); + } else { + $flags = $meta['flags']; + $found = false; + foreach ($flags as $k => $flag) { + if ($flag == 'multiple_key') + $found = true; + } + if (!$found) + printf("[1005] Flags seem wrong %s\n", var_export($meta, true)); + } + } + + $stmt = $db->query('SELECT NULL AS col1'); + $meta = $stmt->getColumnMeta(0); + if ('NULL' !== $meta['native_type']) + printf("[1006] Expecting NULL got %s\n", $meta['native_type']); } catch (PDOException $e) { - // we should never get here, we use warnings, but never trust a system... - printf("[001] %s, [%s} %s\n", - $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); + // we should never get here, we use warnings, but never trust a system... + printf("[001] %s, [%s} %s\n", + $e->getMessage(), $db->errorInfo(), implode(' ', $db->errorInfo())); } $db->exec('DROP TABLE IF EXISTS test'); diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt index 9e36714d54..7f4904d23b 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_multiquery.phpt @@ -8,48 +8,48 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - function mysql_stmt_multiquery_wrong_usage($db) { + function mysql_stmt_multiquery_wrong_usage($db) { - $stmt = $db->query('SELECT label FROM test ORDER BY id ASC LIMIT 1; SELECT label FROM test ORDER BY id ASC LIMIT 1'); - var_dump($stmt->errorInfo()); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - var_dump($stmt->errorInfo()); + $stmt = $db->query('SELECT label FROM test ORDER BY id ASC LIMIT 1; SELECT label FROM test ORDER BY id ASC LIMIT 1'); + var_dump($stmt->errorInfo()); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + var_dump($stmt->errorInfo()); - } + } - function mysql_stmt_multiquery_proper_usage($db) { + function mysql_stmt_multiquery_proper_usage($db) { - $stmt = $db->query('SELECT label FROM test ORDER BY id ASC LIMIT 1; SELECT label FROM test ORDER BY id ASC LIMIT 1'); - do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } while ($stmt->nextRowset()); + $stmt = $db->query('SELECT label FROM test ORDER BY id ASC LIMIT 1; SELECT label FROM test ORDER BY id ASC LIMIT 1'); + do { + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + } while ($stmt->nextRowset()); - } + } - try { + try { - printf("Emulated Prepared Statements...\n"); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - mysql_stmt_multiquery_wrong_usage($db); - mysql_stmt_multiquery_proper_usage($db); + printf("Emulated Prepared Statements...\n"); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + mysql_stmt_multiquery_wrong_usage($db); + mysql_stmt_multiquery_proper_usage($db); - printf("Native Prepared Statements...\n"); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - mysql_stmt_multiquery_wrong_usage($db); - mysql_stmt_multiquery_proper_usage($db); + printf("Native Prepared Statements...\n"); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + mysql_stmt_multiquery_wrong_usage($db); + mysql_stmt_multiquery_proper_usage($db); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_nextrowset.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_nextrowset.phpt index 9452ca8ec5..e473d6716e 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_nextrowset.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_nextrowset.phpt @@ -23,90 +23,90 @@ if (!MySQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - MySQLPDOTest::createTestTable($db); + MySQLPDOTest::createTestTable($db); - $stmt = $db->query('SELECT id FROM test'); - if (false !== ($tmp = $stmt->nextRowSet())) - printf("[002] Expecting false got %s\n", var_export($tmp, true)); + $stmt = $db->query('SELECT id FROM test'); + if (false !== ($tmp = $stmt->nextRowSet())) + printf("[002] Expecting false got %s\n", var_export($tmp, true)); - // TODO: should give a warning, but its PDO, let's ignore the missing warning for now - if (false !== ($tmp = $stmt->nextRowSet(1))) - printf("[003] Expecting false got %s\n", var_export($tmp, true)); + // TODO: should give a warning, but its PDO, let's ignore the missing warning for now + if (false !== ($tmp = $stmt->nextRowSet(1))) + printf("[003] Expecting false got %s\n", var_export($tmp, true)); - function test_proc1($db) { + function test_proc1($db) { - $stmt = $db->query('SELECT @VERSION as _version'); - $tmp = $stmt->fetch(PDO::FETCH_ASSOC); - assert($tmp['_version'] === NULL); - while ($stmt->fetch()) ; + $stmt = $db->query('SELECT @VERSION as _version'); + $tmp = $stmt->fetch(PDO::FETCH_ASSOC); + assert($tmp['_version'] === NULL); + while ($stmt->fetch()) ; - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p(OUT ver_param VARCHAR(25)) BEGIN SELECT VERSION() INTO ver_param; END;'); - $db->exec('CALL p(@VERSION)'); - $stmt = $db->query('SELECT @VERSION as _version'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - var_dump($stmt->nextRowSet()); + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p(OUT ver_param VARCHAR(25)) BEGIN SELECT VERSION() INTO ver_param; END;'); + $db->exec('CALL p(@VERSION)'); + $stmt = $db->query('SELECT @VERSION as _version'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + var_dump($stmt->nextRowSet()); - } + } - function test_proc2($db) { + function test_proc2($db) { - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p() BEGIN SELECT id FROM test ORDER BY id ASC LIMIT 3; SELECT id, label FROM test WHERE id < 4 ORDER BY id DESC LIMIT 3; END;'); - $stmt = $db->query('CALL p()'); - do { - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - } while ($stmt->nextRowSet()); - var_dump($stmt->nextRowSet()); + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p() BEGIN SELECT id FROM test ORDER BY id ASC LIMIT 3; SELECT id, label FROM test WHERE id < 4 ORDER BY id DESC LIMIT 3; END;'); + $stmt = $db->query('CALL p()'); + do { + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + } while ($stmt->nextRowSet()); + var_dump($stmt->nextRowSet()); - } + } - try { + try { - // Emulated PS - printf("Emulated PS...\n"); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + // Emulated PS + printf("Emulated PS...\n"); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); - test_proc1($db); - test_proc2($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); + test_proc1($db); + test_proc2($db); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); - test_proc1($db); - test_proc2($db); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); + test_proc1($db); + test_proc2($db); - // Native PS - printf("Native PS...\n"); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - test_proc1($db); - test_proc2($db); + // Native PS + printf("Native PS...\n"); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + test_proc1($db); + test_proc2($db); - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 0); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - test_proc1($db); - test_proc2($db); + test_proc1($db); + test_proc2($db); - @$db->exec('DROP PROCEDURE IF EXISTS p'); + @$db->exec('DROP PROCEDURE IF EXISTS p'); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_rowcount.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_rowcount.phpt index 713945e98d..99eb481304 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_rowcount.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_rowcount.phpt @@ -8,24 +8,24 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - MySQLPDOTest::createTestTable($db); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + MySQLPDOTest::createTestTable($db); - try { + try { - if (0 !== ($tmp = $db->query('SELECT id FROM test WHERE 1 = 0')->rowCount())) - printf("[002] Expecting 0 got %s", var_export($tmp, true)); + if (0 !== ($tmp = $db->query('SELECT id FROM test WHERE 1 = 0')->rowCount())) + printf("[002] Expecting 0 got %s", var_export($tmp, true)); - if (1 !== ($tmp = $db->query('SELECT id FROM test WHERE id = 1')->rowCount())) - printf("[003] Expecting 1 got %s", var_export($tmp, true)); + if (1 !== ($tmp = $db->query('SELECT id FROM test WHERE id = 1')->rowCount())) + printf("[003] Expecting 1 got %s", var_export($tmp, true)); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - print "done!"; + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_unbuffered_2050.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_unbuffered_2050.phpt index 35d4ba3cba..13f4f5769a 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_unbuffered_2050.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_unbuffered_2050.phpt @@ -11,104 +11,104 @@ if (MYSQLPDOTest::isPDOMySQLnd()) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - try { - - printf("Native PS...\n"); - $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); - if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) - printf("[004] Unable to turn off emulated prepared statements\n"); - - printf("Buffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - printf("Unbuffered...\n"); - MySQLPDOTest::createTestTable($db); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - /* - NOTE - this will cause an error and it OK - When using unbuffered prepared statements MySQL expects you to - fetch all data from the row before sending new data to the server. - PDO::query() will prepare and execute a statement in one step. - After the execution of PDO::query(), MySQL expects you to fetch - the results from the line before sending new commands. However, - PHP/PDO will send a CLOSE message as part of the PDO::query() call. - - The following happens: - - $stmt = PDO::query(<some query>) - mysql_stmt_prepare() - mysql_stmt_execute() - - $stmt->fetchAll() - mysql_stmt_fetch() - - And now the right side of the expression will be executed first: - $stmt = PDO::query(<some query>) - PDO::query(<some query>) - mysql_stmt_prepare - mysql_stmt_execute - - PHP continues at the left side of the expression: - - $stmt = PDO::query(<some query>) - - What happens is that $stmt gets overwritten. The reference counter of the - zval representing the current value of $stmt. PDO gets a callback that - it has to free the resources associated with the zval representing the - current value of stmt: - mysql_stmt_close - ---> ERROR - ---> execute() has been send on the line, you are supposed to fetch - ---> you must not try to send a CLOSE after execute() - ---> Error: 2050 (CR_FETCH_CANCELED) - ---> Message: Row retrieval was canceled by mysql_stmt_close() call - ---> MySQL does its best to recover the line and cancels the retrieval - - PHP proceeds and assigns the new statement object/zval obtained from - PDO to $stmt. - - Solutions: - - use mysqlnd - - use prepare() + execute() instead of query() - - as there is no explicit close() in PDO, try unset($stmt) before the new assignment - - fix PDO::query() [not the driver, fix PDO itself] - */ - - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - $stmt = $db->prepare('SELECT id, label FROM test WHERE id = 1'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - $stmt = $db->prepare('SELECT id, label FROM test WHERE id = 1'); - $stmt->execute(); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - unset($stmt); - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - unset($stmt); - $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + try { + + printf("Native PS...\n"); + $db->setAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY, 0); + if (0 != $db->getAttribute(PDO::MYSQL_ATTR_DIRECT_QUERY)) + printf("[004] Unable to turn off emulated prepared statements\n"); + + printf("Buffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, true); + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + printf("Unbuffered...\n"); + MySQLPDOTest::createTestTable($db); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, false); + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + /* + NOTE - this will cause an error and it OK + When using unbuffered prepared statements MySQL expects you to + fetch all data from the row before sending new data to the server. + PDO::query() will prepare and execute a statement in one step. + After the execution of PDO::query(), MySQL expects you to fetch + the results from the line before sending new commands. However, + PHP/PDO will send a CLOSE message as part of the PDO::query() call. + + The following happens: + + $stmt = PDO::query(<some query>) + mysql_stmt_prepare() + mysql_stmt_execute() + + $stmt->fetchAll() + mysql_stmt_fetch() + + And now the right side of the expression will be executed first: + $stmt = PDO::query(<some query>) + PDO::query(<some query>) + mysql_stmt_prepare + mysql_stmt_execute + + PHP continues at the left side of the expression: + + $stmt = PDO::query(<some query>) + + What happens is that $stmt gets overwritten. The reference counter of the + zval representing the current value of $stmt. PDO gets a callback that + it has to free the resources associated with the zval representing the + current value of stmt: + mysql_stmt_close + ---> ERROR + ---> execute() has been send on the line, you are supposed to fetch + ---> you must not try to send a CLOSE after execute() + ---> Error: 2050 (CR_FETCH_CANCELED) + ---> Message: Row retrieval was canceled by mysql_stmt_close() call + ---> MySQL does its best to recover the line and cancels the retrieval + + PHP proceeds and assigns the new statement object/zval obtained from + PDO to $stmt. + + Solutions: + - use mysqlnd + - use prepare() + execute() instead of query() + - as there is no explicit close() in PDO, try unset($stmt) before the new assignment + - fix PDO::query() [not the driver, fix PDO itself] + */ + + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + $stmt = $db->prepare('SELECT id, label FROM test WHERE id = 1'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + $stmt = $db->prepare('SELECT id, label FROM test WHERE id = 1'); + $stmt->execute(); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + unset($stmt); + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + unset($stmt); + $stmt = $db->query('SELECT id, label FROM test WHERE id = 1'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_stmt_variable_columncount.phpt b/ext/pdo_mysql/tests/pdo_mysql_stmt_variable_columncount.phpt index 7c39b88558..21fd83f57d 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_stmt_variable_columncount.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_stmt_variable_columncount.phpt @@ -21,105 +21,105 @@ if ($version < 50000) ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - $db = MySQLPDOTest::factory(); - - function check_result($offset, $stmt, $columns) { - - do { - $row = $stmt->fetch(PDO::FETCH_ASSOC); - } while ($stmt->nextRowSet()); - - if (!isset($row['one']) || ($row['one'] != 1)) { - printf("[%03d + 1] Expecting array('one' => 1), got %s\n", $offset, var_export($row, true)); - return false; - } - - if (($columns == 2) && - (!isset($row['two']) || ($row['two'] != 2))) { - printf("[%03d + 2] Expecting array('one' => 1, 'two' => 2), got %s\n", $offset, var_export($row, true)); - return false; - } else if (($columns == 1) && isset($row['two'])) { - printf("[%03d + 3] Expecting one array element got two\n", $offset); - return false; - } - - return true; - } - - try { - - // What will happen if a PS returns a different number of result set column upon each execution? - // Lets try with a SP accepting parameters... - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p(IN cols INT) BEGIN IF cols < 2 THEN SELECT cols AS "one"; ELSE SELECT 1 AS "one", cols AS "two"; END IF; END;'); - - // Emulates PS first - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - $stmt = $db->prepare('CALL p(?)'); - - $columns = null; - $stmt->bindParam(1, $columns); - for ($i = 0; $i < 5; $i++) { - $columns = ($i % 2) + 1; - $stmt->execute(); - check_result($i, $stmt, $columns); - } - - if (MySQLPDOTest::isPDOMySQLnd()) { - // Native PS - // Libmysql cannot handle such a stored procedure. You will see leaks with libmysql - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); - $stmt = $db->prepare('CALL p(?)'); - $stmt->bindParam(1, $columns); - for ($i = 5; $i < 10; $i++) { - $columns = ($i % 2) + 1; - $stmt->execute(); - check_result($i, $stmt, $columns); - } - } - - // And now without parameters... - this gives a different control flow inside PDO - $db->exec('DROP PROCEDURE IF EXISTS p'); - $db->exec('CREATE PROCEDURE p() BEGIN DECLARE cols INT; SELECT @numcols INTO cols; IF cols < 2 THEN SET @numcols = 2; SELECT cols AS "one"; ELSE SET @numcols = 1; SELECT 1 AS "one", cols AS "two"; END IF; END;'); - - // Emulates PS first - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); - $db->exec('SET @numcols = 1'); - $stmt = $db->prepare('CALL p()'); - $stmt->execute(); - check_result(11, $stmt, 1); - $stmt->execute(); - check_result(12, $stmt, 2); - $db->exec('SET @numcols = 1'); - $stmt->execute(); - check_result(13, $stmt, 1); - - if (MySQLPDOTest::isPDOMySQLnd()) { - // Native PS - // Libmysql cannot handle such a stored procedure. You will see leaks with libmysql - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); - $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); - $db->exec('SET @numcols = 1'); - $stmt = $db->prepare('CALL p()'); - $stmt->execute(); - check_result(14, $stmt, 1); - $stmt->execute(); - check_result(15, $stmt, 2); - $db->exec('SET @numcols = 1'); - $stmt->execute(); - check_result(16, $stmt, 1); - } - - } catch (PDOException $e) { - printf("[99] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } - - print "done!"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + $db = MySQLPDOTest::factory(); + + function check_result($offset, $stmt, $columns) { + + do { + $row = $stmt->fetch(PDO::FETCH_ASSOC); + } while ($stmt->nextRowSet()); + + if (!isset($row['one']) || ($row['one'] != 1)) { + printf("[%03d + 1] Expecting array('one' => 1), got %s\n", $offset, var_export($row, true)); + return false; + } + + if (($columns == 2) && + (!isset($row['two']) || ($row['two'] != 2))) { + printf("[%03d + 2] Expecting array('one' => 1, 'two' => 2), got %s\n", $offset, var_export($row, true)); + return false; + } else if (($columns == 1) && isset($row['two'])) { + printf("[%03d + 3] Expecting one array element got two\n", $offset); + return false; + } + + return true; + } + + try { + + // What will happen if a PS returns a different number of result set column upon each execution? + // Lets try with a SP accepting parameters... + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p(IN cols INT) BEGIN IF cols < 2 THEN SELECT cols AS "one"; ELSE SELECT 1 AS "one", cols AS "two"; END IF; END;'); + + // Emulates PS first + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + $stmt = $db->prepare('CALL p(?)'); + + $columns = null; + $stmt->bindParam(1, $columns); + for ($i = 0; $i < 5; $i++) { + $columns = ($i % 2) + 1; + $stmt->execute(); + check_result($i, $stmt, $columns); + } + + if (MySQLPDOTest::isPDOMySQLnd()) { + // Native PS + // Libmysql cannot handle such a stored procedure. You will see leaks with libmysql + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); + $stmt = $db->prepare('CALL p(?)'); + $stmt->bindParam(1, $columns); + for ($i = 5; $i < 10; $i++) { + $columns = ($i % 2) + 1; + $stmt->execute(); + check_result($i, $stmt, $columns); + } + } + + // And now without parameters... - this gives a different control flow inside PDO + $db->exec('DROP PROCEDURE IF EXISTS p'); + $db->exec('CREATE PROCEDURE p() BEGIN DECLARE cols INT; SELECT @numcols INTO cols; IF cols < 2 THEN SET @numcols = 2; SELECT cols AS "one"; ELSE SET @numcols = 1; SELECT 1 AS "one", cols AS "two"; END IF; END;'); + + // Emulates PS first + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 1); + $db->exec('SET @numcols = 1'); + $stmt = $db->prepare('CALL p()'); + $stmt->execute(); + check_result(11, $stmt, 1); + $stmt->execute(); + check_result(12, $stmt, 2); + $db->exec('SET @numcols = 1'); + $stmt->execute(); + check_result(13, $stmt, 1); + + if (MySQLPDOTest::isPDOMySQLnd()) { + // Native PS + // Libmysql cannot handle such a stored procedure. You will see leaks with libmysql + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, 0); + $db->setAttribute(PDO::MYSQL_ATTR_USE_BUFFERED_QUERY, 1); + $db->exec('SET @numcols = 1'); + $stmt = $db->prepare('CALL p()'); + $stmt->execute(); + check_result(14, $stmt, 1); + $stmt->execute(); + check_result(15, $stmt, 2); + $db->exec('SET @numcols = 1'); + $stmt->execute(); + check_result(16, $stmt, 1); + } + + } catch (PDOException $e) { + printf("[99] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } + + print "done!"; ?> --EXPECT-- done! diff --git a/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt b/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt index 83158b3484..f98271d792 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_subclass.phpt @@ -8,65 +8,65 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - try { + try { - class MyPDO extends PDO { + class MyPDO extends PDO { - public function __construct() { - $this->protocol(); - return call_user_func_array(array($this, 'parent::__construct'), func_get_args()); - } + public function __construct() { + $this->protocol(); + return call_user_func_array(array($this, 'parent::__construct'), func_get_args()); + } - public function exec($statement) { - $this->protocol(); - return parent::exec($statement); - } + public function exec($statement) { + $this->protocol(); + return parent::exec($statement); + } - public function query($statement) { - $this->protocol(); - return call_user_func_array(array($this, 'parent::query'), func_get_args()); - } + public function query($statement) { + $this->protocol(); + return call_user_func_array(array($this, 'parent::query'), func_get_args()); + } - public function __call($method, $args) { - print "__call(".var_export($method,true).", ".var_export($args, true).")\n"; - // $this->protocol(); - } + public function __call($method, $args) { + print "__call(".var_export($method,true).", ".var_export($args, true).")\n"; + // $this->protocol(); + } - private function protocol() { - $stack = debug_backtrace(); - if (!isset($stack[1])) - return; + private function protocol() { + $stack = debug_backtrace(); + if (!isset($stack[1])) + return; - printf("%s(", $stack[1]['function']); - $args = ''; - foreach ($stack[1]['args'] as $k => $v) - $args .= sprintf("%s, ", var_export($v, true)); - if ($args != '') - printf("%s", substr($args, 0, -2)); - printf(")\n"); - } + printf("%s(", $stack[1]['function']); + $args = ''; + foreach ($stack[1]['args'] as $k => $v) + $args .= sprintf("%s, ", var_export($v, true)); + if ($args != '') + printf("%s", substr($args, 0, -2)); + printf(")\n"); + } - } + } - $db = new MyPDO(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS); - $db->exec('DROP TABLE IF EXISTS test'); - $db->exec('CREATE TABLE test(id INT)'); - $db->exec('INSERT INTO test(id) VALUES (1), (2)'); - $stmt = $db->query('SELECT * FROM test ORDER BY id ASC'); - var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); - var_dump($stmt->fetch()); - $db->intercept_call(); + $db = new MyPDO(PDO_MYSQL_TEST_DSN, PDO_MYSQL_TEST_USER, PDO_MYSQL_TEST_PASS); + $db->exec('DROP TABLE IF EXISTS test'); + $db->exec('CREATE TABLE test(id INT)'); + $db->exec('INSERT INTO test(id) VALUES (1), (2)'); + $stmt = $db->query('SELECT * FROM test ORDER BY id ASC'); + var_dump($stmt->fetchAll(PDO::FETCH_ASSOC)); + var_dump($stmt->fetch()); + $db->intercept_call(); - } catch (PDOException $e) { - printf("[001] %s [%s] %s\n", - $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); - } + } catch (PDOException $e) { + printf("[001] %s [%s] %s\n", + $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo())); + } - $db->exec('DROP TABLE IF EXISTS test'); - print "done!\n"; + $db->exec('DROP TABLE IF EXISTS test'); + print "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_types.phpt b/ext/pdo_mysql/tests/pdo_mysql_types.phpt index fee1aff514..6360c9a61b 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_types.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_types.phpt @@ -8,171 +8,171 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL, $alternative_type = NULL) { - - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); - @$db->exec($sql); - if ($db->errorCode() != 0) { - // not all MySQL Server versions and/or engines might support the type - return true; - } - - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); - $stmt->bindValue(1, $offset); - $stmt->bindValue(2, $value); - if (!$stmt->execute()) { - printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); - return false; - } - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); - $stmt = $db->query('SELECT id, label FROM test'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - - if (!isset($row['id']) || !isset($row['label'])) { - printf("[%03d + 2] Fetched result seems wrong, dumping result: %s\n", $offset, var_export($row, true)); - return false; - } - - if ($row['id'] != $offset) { - printf("[%03d + 3] Expecting %s got %s\n", $offset, $row['id']); - return false; - } - - if (!is_null($pattern)) { - if (!preg_match($pattern, $row['label'])) { - printf("[%03d + 5] Value seems wrong, accepting pattern %s got %s, check manually\n", - $offset, $pattern, var_export($row['label'], true)); - return false; - } - - } else { - - $exp = $value; - if (!is_null($ret_value)) { - // we expect a different return value than our input value - // typically the difference is only the type - $exp = $ret_value; - } - if ($row['label'] !== $exp && !is_null($alternative_type) && gettype($row['label']) != $alternative_type) { - printf("[%03d + 4] %s - input = %s/%s, output = %s/%s (alternative type: %s)\n", $offset, - $sql_type, var_export($exp, true), gettype($exp), - var_export($row['label'], true), gettype($row['label']), - $alternative_type); - return false; - } - - } - - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $stmt = $db->query('SELECT id, label FROM test'); - $row_string = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - if (is_null($pattern) && ($row['label'] != $row_string['label'])) { - printf("%s - STRINGIGY = %s, NATIVE = %s\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true)); - return false; - } else if (!is_null($pattern) && !preg_match($pattern, $row_string['label'])) { - printf("%s - STRINGIGY = %s, NATIVE = %s, pattern '%s'\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true), $pattern); - return false; - } - - - return true; - } - - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL, $alternative_type = NULL) { + + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); + @$db->exec($sql); + if ($db->errorCode() != 0) { + // not all MySQL Server versions and/or engines might support the type + return true; + } + + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); + $stmt->bindValue(1, $offset); + $stmt->bindValue(2, $value); + if (!$stmt->execute()) { + printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); + return false; + } + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + $stmt = $db->query('SELECT id, label FROM test'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + + if (!isset($row['id']) || !isset($row['label'])) { + printf("[%03d + 2] Fetched result seems wrong, dumping result: %s\n", $offset, var_export($row, true)); + return false; + } + + if ($row['id'] != $offset) { + printf("[%03d + 3] Expecting %s got %s\n", $offset, $row['id']); + return false; + } + + if (!is_null($pattern)) { + if (!preg_match($pattern, $row['label'])) { + printf("[%03d + 5] Value seems wrong, accepting pattern %s got %s, check manually\n", + $offset, $pattern, var_export($row['label'], true)); + return false; + } + + } else { + + $exp = $value; + if (!is_null($ret_value)) { + // we expect a different return value than our input value + // typically the difference is only the type + $exp = $ret_value; + } + if ($row['label'] !== $exp && !is_null($alternative_type) && gettype($row['label']) != $alternative_type) { + printf("[%03d + 4] %s - input = %s/%s, output = %s/%s (alternative type: %s)\n", $offset, + $sql_type, var_export($exp, true), gettype($exp), + var_export($row['label'], true), gettype($row['label']), + $alternative_type); + return false; + } + + } + + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $stmt = $db->query('SELECT id, label FROM test'); + $row_string = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + if (is_null($pattern) && ($row['label'] != $row_string['label'])) { + printf("%s - STRINGIGY = %s, NATIVE = %s\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true)); + return false; + } else if (!is_null($pattern) && !preg_match($pattern, $row_string['label'])) { + printf("%s - STRINGIGY = %s, NATIVE = %s, pattern '%s'\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true), $pattern); + return false; + } + + + return true; + } + + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); /* - test_type($db, 20, 'BIT(8)', 1); + test_type($db, 20, 'BIT(8)', 1); */ - $is_mysqlnd = MySQLPDOTest::isPDOMySQLnd(); + $is_mysqlnd = MySQLPDOTest::isPDOMySQLnd(); - test_type($db, 30, 'TINYINT', -127, ($is_mysqlnd) ? -127: '-127'); - test_type($db, 40, 'TINYINT UNSIGNED', 255, ($is_mysqlnd) ? 255 : '255'); - test_type($db, 50, 'BOOLEAN', 1, ($is_mysqlnd) ? 1 : '1'); + test_type($db, 30, 'TINYINT', -127, ($is_mysqlnd) ? -127: '-127'); + test_type($db, 40, 'TINYINT UNSIGNED', 255, ($is_mysqlnd) ? 255 : '255'); + test_type($db, 50, 'BOOLEAN', 1, ($is_mysqlnd) ? 1 : '1'); - test_type($db, 60, 'SMALLINT', -32768, ($is_mysqlnd) ? -32768 : '-32768'); - test_type($db, 70, 'SMALLINT UNSIGNED', 65535, ($is_mysqlnd) ? 65535 : '65535'); + test_type($db, 60, 'SMALLINT', -32768, ($is_mysqlnd) ? -32768 : '-32768'); + test_type($db, 70, 'SMALLINT UNSIGNED', 65535, ($is_mysqlnd) ? 65535 : '65535'); - test_type($db, 80, 'MEDIUMINT', -8388608, ($is_mysqlnd) ? -8388608 : '-8388608'); - test_type($db, 90, 'MEDIUMINT UNSIGNED', 16777215, ($is_mysqlnd) ? 16777215 : '16777215'); + test_type($db, 80, 'MEDIUMINT', -8388608, ($is_mysqlnd) ? -8388608 : '-8388608'); + test_type($db, 90, 'MEDIUMINT UNSIGNED', 16777215, ($is_mysqlnd) ? 16777215 : '16777215'); - test_type($db, 100, 'INT', -2147483648, - ($is_mysqlnd) ? ((PHP_INT_SIZE > 4) ? (int)-2147483648 : (double)-2147483648) : '-2147483648', - NULL, ($is_mysqlnd) ? 'integer' : NULL); + test_type($db, 100, 'INT', -2147483648, + ($is_mysqlnd) ? ((PHP_INT_SIZE > 4) ? (int)-2147483648 : (double)-2147483648) : '-2147483648', + NULL, ($is_mysqlnd) ? 'integer' : NULL); - test_type($db, 110, 'INT UNSIGNED', 4294967295, ($is_mysqlnd) ? ((PHP_INT_SIZE > 4) ? 4294967295 : '4294967295') : '4294967295'); + test_type($db, 110, 'INT UNSIGNED', 4294967295, ($is_mysqlnd) ? ((PHP_INT_SIZE > 4) ? 4294967295 : '4294967295') : '4294967295'); - // no chance to return int with the current PDO version - we are forced to return strings - test_type($db, 120, 'BIGINT', 1, ($is_mysqlnd) ? 1 : '1'); - // to avoid trouble with numeric ranges, lets pass the numbers as a string - test_type($db, 130, 'BIGINT', '-9223372036854775808', NULL, '/^\-9[\.]*22/'); - test_type($db, 140, 'BIGINT UNSIGNED', '18446744073709551615', NULL, '/^1[\.]*844/'); + // no chance to return int with the current PDO version - we are forced to return strings + test_type($db, 120, 'BIGINT', 1, ($is_mysqlnd) ? 1 : '1'); + // to avoid trouble with numeric ranges, lets pass the numbers as a string + test_type($db, 130, 'BIGINT', '-9223372036854775808', NULL, '/^\-9[\.]*22/'); + test_type($db, 140, 'BIGINT UNSIGNED', '18446744073709551615', NULL, '/^1[\.]*844/'); - test_type($db, 150, 'REAL', -1.01, ($is_mysqlnd) ? -1.01 : '-1.01'); - test_type($db, 160, 'REAL UNSIGNED', 1.01, ($is_mysqlnd) ? 1.01 : '1.01'); + test_type($db, 150, 'REAL', -1.01, ($is_mysqlnd) ? -1.01 : '-1.01'); + test_type($db, 160, 'REAL UNSIGNED', 1.01, ($is_mysqlnd) ? 1.01 : '1.01'); - test_type($db, 170, 'DOUBLE', -1.01, ($is_mysqlnd) ? -1.01 : '-1.01'); - test_type($db, 180, 'DOUBLE UNSIGNED', 1.01, ($is_mysqlnd) ? 1.01 : '1.01'); + test_type($db, 170, 'DOUBLE', -1.01, ($is_mysqlnd) ? -1.01 : '-1.01'); + test_type($db, 180, 'DOUBLE UNSIGNED', 1.01, ($is_mysqlnd) ? 1.01 : '1.01'); - test_type($db, 210, 'FLOAT', -1.01, NULL, '/^\-1.0\d+/'); - test_type($db, 220, 'FLOAT UNSIGNED', 1.01, NULL, '/^1.0\d+/'); + test_type($db, 210, 'FLOAT', -1.01, NULL, '/^\-1.0\d+/'); + test_type($db, 220, 'FLOAT UNSIGNED', 1.01, NULL, '/^1.0\d+/'); - test_type($db, 250, 'DECIMAL', -1.01, '-1'); - test_type($db, 260, 'DECIMAL UNSIGNED', 1.01, '1'); + test_type($db, 250, 'DECIMAL', -1.01, '-1'); + test_type($db, 260, 'DECIMAL UNSIGNED', 1.01, '1'); - test_type($db, 290, 'NUMERIC', -1.01, '-1'); - test_type($db, 300, 'NUMERIC UNSIGNED', 1.01, '1'); + test_type($db, 290, 'NUMERIC', -1.01, '-1'); + test_type($db, 300, 'NUMERIC UNSIGNED', 1.01, '1'); - test_type($db, 330, 'DATE', '2008-04-23'); - test_type($db, 340, 'TIME', '14:37:00'); - test_type($db, 350, 'TIMESTAMP', '2008-05-06 21:09:00'); - test_type($db, 360, 'DATETIME', '2008-03-23 14:38:00'); - test_type($db, 370, 'YEAR', 2008, ($is_mysqlnd) ? 2008 : '2008'); + test_type($db, 330, 'DATE', '2008-04-23'); + test_type($db, 340, 'TIME', '14:37:00'); + test_type($db, 350, 'TIMESTAMP', '2008-05-06 21:09:00'); + test_type($db, 360, 'DATETIME', '2008-03-23 14:38:00'); + test_type($db, 370, 'YEAR', 2008, ($is_mysqlnd) ? 2008 : '2008'); - test_type($db, 380, 'CHAR(1)', 'a'); - test_type($db, 390, 'CHAR(10)', '0123456789'); - test_type($db, 400, 'CHAR(255)', str_repeat('z', 255)); - test_type($db, 410, 'VARCHAR(1)', 'a'); - test_type($db, 420, 'VARCHAR(10)', '0123456789'); - test_type($db, 430, 'VARCHAR(255)', str_repeat('z', 255)); + test_type($db, 380, 'CHAR(1)', 'a'); + test_type($db, 390, 'CHAR(10)', '0123456789'); + test_type($db, 400, 'CHAR(255)', str_repeat('z', 255)); + test_type($db, 410, 'VARCHAR(1)', 'a'); + test_type($db, 420, 'VARCHAR(10)', '0123456789'); + test_type($db, 430, 'VARCHAR(255)', str_repeat('z', 255)); - test_type($db, 440, 'BINARY(1)', str_repeat('a', 1)); - test_type($db, 450, 'BINARY(255)', str_repeat('b', 255)); - test_type($db, 460, 'VARBINARY(1)', str_repeat('a', 1)); - test_type($db, 470, 'VARBINARY(255)', str_repeat('b', 255)); + test_type($db, 440, 'BINARY(1)', str_repeat('a', 1)); + test_type($db, 450, 'BINARY(255)', str_repeat('b', 255)); + test_type($db, 460, 'VARBINARY(1)', str_repeat('a', 1)); + test_type($db, 470, 'VARBINARY(255)', str_repeat('b', 255)); - test_type($db, 480, 'TINYBLOB', str_repeat('b', 255)); - test_type($db, 490, 'BLOB', str_repeat('b', 256)); - test_type($db, 500, 'MEDIUMBLOB', str_repeat('b', 256)); - test_type($db, 510, 'LONGBLOB', str_repeat('b', 256)); + test_type($db, 480, 'TINYBLOB', str_repeat('b', 255)); + test_type($db, 490, 'BLOB', str_repeat('b', 256)); + test_type($db, 500, 'MEDIUMBLOB', str_repeat('b', 256)); + test_type($db, 510, 'LONGBLOB', str_repeat('b', 256)); - test_type($db, 520, 'TINYTEXT', str_repeat('b', 255)); - test_type($db, 530, 'TINYTEXT BINARY', str_repeat('b', 255)); + test_type($db, 520, 'TINYTEXT', str_repeat('b', 255)); + test_type($db, 530, 'TINYTEXT BINARY', str_repeat('b', 255)); - test_type($db, 560, 'TEXT', str_repeat('b', 256)); - test_type($db, 570, 'TEXT BINARY', str_repeat('b', 256)); + test_type($db, 560, 'TEXT', str_repeat('b', 256)); + test_type($db, 570, 'TEXT BINARY', str_repeat('b', 256)); - test_type($db, 580, 'MEDIUMTEXT', str_repeat('b', 256)); - test_type($db, 590, 'MEDIUMTEXT BINARY', str_repeat('b', 256)); + test_type($db, 580, 'MEDIUMTEXT', str_repeat('b', 256)); + test_type($db, 590, 'MEDIUMTEXT BINARY', str_repeat('b', 256)); - test_type($db, 600, 'LONGTEXT', str_repeat('b', 256)); - test_type($db, 610, 'LONGTEXT BINARY', str_repeat('b', 256)); + test_type($db, 600, 'LONGTEXT', str_repeat('b', 256)); + test_type($db, 610, 'LONGTEXT BINARY', str_repeat('b', 256)); - test_type($db, 620, "ENUM('yes', 'no') DEFAULT 'yes'", 'no'); - test_type($db, 630, "SET('yes', 'no') DEFAULT 'yes'", 'no'); + test_type($db, 620, "ENUM('yes', 'no') DEFAULT 'yes'", 'no'); + test_type($db, 630, "SET('yes', 'no') DEFAULT 'yes'", 'no'); - test_type($db, 640, 'DECIMAL(3,2)', -1.01, '-1.01'); + test_type($db, 640, 'DECIMAL(3,2)', -1.01, '-1.01'); - echo "done!\n"; + echo "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pdo_mysql_types_zerofill.phpt b/ext/pdo_mysql/tests/pdo_mysql_types_zerofill.phpt index 1ef5ab1370..8e98b74acb 100644 --- a/ext/pdo_mysql/tests/pdo_mysql_types_zerofill.phpt +++ b/ext/pdo_mysql/tests/pdo_mysql_types_zerofill.phpt @@ -8,115 +8,115 @@ MySQLPDOTest::skip(); ?> --FILE-- <?php - require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); - - function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL) { - - $db->exec('DROP TABLE IF EXISTS test'); - $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); - @$db->exec($sql); - if ($db->errorCode() != 0) { - // not all MySQL Server versions and/or engines might support the type - return true; - } - - $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); - $stmt->bindValue(1, $offset); - $stmt->bindValue(2, $value); - try { - if (!$stmt->execute()) { - printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); - return false; - } - } catch (PDOException $e) { - // This might be a SQL warning on signed values inserted in unsigned columns - // Zerofill implies unsigned but the test plays with signed = negative values as well! - return true; - } - - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); - $stmt = $db->query('SELECT id, label FROM test'); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - if (!isset($row['id']) || !isset($row['label'])) { - printf("[%03d + 2] Fetched result seems wrong, dumping result: %s\n", $offset, var_export($row, true)); - return false; - } - - if ($row['id'] != $offset) { - printf("[%03d + 3] Expecting %s got %s\n", $offset, $row['id']); - return false; - } - - if (!is_null($pattern)) { - - if (!preg_match($pattern, $row['label'])) { - printf("[%03d + 5] Value seems wrong, accepting pattern %s got %s, check manually\n", - $offset, $pattern, var_export($row['label'], true)); - return false; - } - - } else { - - $exp = $value; - if (!is_null($ret_value)) { - // we expect a different return value than our input value - // typically the difference is only the type - $exp = $ret_value; - } - - if ($row['label'] !== $exp) { - printf("[%03d + 4] %s - input = %s/%s, output = %s/%s\n", $offset, - $sql_type, var_export($exp, true), gettype($exp), - var_export($row['label'], true), gettype($row['label'])); - return false; - } - - } - - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); - $stmt = $db->query('SELECT id, label FROM test'); - $row_string = $stmt->fetch(PDO::FETCH_ASSOC); - $stmt->closeCursor(); - if ($row['label'] != $row_string['label']) { - printf("%s - STRINGIGY = %s, NATIVE = %s\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true)); - return false; - } - - return true; - } - - $db = MySQLPDOTest::factory(); - $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); - $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); - $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); - - $stmt = $db->prepare('SELECT @@sql_mode AS _mode'); - $stmt->execute(); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - $real_as_float = (false === stristr($row['_mode'], "REAL_AS_FLOAT")) ? false : true; - - test_type($db, 100, 'REAL ZEROFILL', -1.01, NULL, '/^[0]*0$/'); - test_type($db, 110, 'REAL ZEROFILL', 1.01, NULL, ($real_as_float) ? '/^[0]*1\.0.*$/' : '/^[0]*1\.01$/'); - test_type($db, 120, 'REAL UNSIGNED ZEROFILL', 1.01, NULL, ($real_as_float) ? '/^[0]*1\..*$/' : '/^[0]*1\.01$/'); - - test_type($db, 130, 'DOUBLE ZEROFILL', -1.01, NULL, '/^[0]*0$/'); - test_type($db, 140, 'DOUBLE ZEROFILL', 1.01, NULL, '/^[0]*1\.01$/'); - test_type($db, 150, 'DOUBLE UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1\.01$/'); - - test_type($db, 160, 'FLOAT ZEROFILL', -1.01, NULL, '/^[0]*0$/'); - test_type($db, 170, 'FLOAT ZEROFILL', 1, NULL, '/^[0]*1$/'); - test_type($db, 180, 'FLOAT UNSIGNED ZEROFILL', -1, NULL, '/^[0]*0$/'); - - test_type($db, 190, 'DECIMAL ZEROFILL', -1.01, NULL, '/^[0]*0$/'); - test_type($db, 200, 'DECIMAL ZEROFILL', 1.01, NULL, '/^[0]*1$/'); - test_type($db, 210, 'DECIMAL UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1$/'); - - test_type($db, 220, 'NUMERIC ZEROFILL', -1, NULL, '/^[0]*0$/'); - test_type($db, 230, 'NUMERIC ZEROFILL', 1, NULL, '/^[0]*1$/'); - test_type($db, 240, 'NUMERIC UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1$/'); - - echo "done!\n"; + require_once(__DIR__ . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'); + + function test_type(&$db, $offset, $sql_type, $value, $ret_value = NULL, $pattern = NULL) { + + $db->exec('DROP TABLE IF EXISTS test'); + $sql = sprintf('CREATE TABLE test(id INT, label %s) ENGINE=%s', $sql_type, MySQLPDOTest::getTableEngine()); + @$db->exec($sql); + if ($db->errorCode() != 0) { + // not all MySQL Server versions and/or engines might support the type + return true; + } + + $stmt = $db->prepare('INSERT INTO test(id, label) VALUES (?, ?)'); + $stmt->bindValue(1, $offset); + $stmt->bindValue(2, $value); + try { + if (!$stmt->execute()) { + printf("[%03d + 1] INSERT failed, %s\n", $offset, var_export($stmt->errorInfo(), true)); + return false; + } + } catch (PDOException $e) { + // This might be a SQL warning on signed values inserted in unsigned columns + // Zerofill implies unsigned but the test plays with signed = negative values as well! + return true; + } + + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + $stmt = $db->query('SELECT id, label FROM test'); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + if (!isset($row['id']) || !isset($row['label'])) { + printf("[%03d + 2] Fetched result seems wrong, dumping result: %s\n", $offset, var_export($row, true)); + return false; + } + + if ($row['id'] != $offset) { + printf("[%03d + 3] Expecting %s got %s\n", $offset, $row['id']); + return false; + } + + if (!is_null($pattern)) { + + if (!preg_match($pattern, $row['label'])) { + printf("[%03d + 5] Value seems wrong, accepting pattern %s got %s, check manually\n", + $offset, $pattern, var_export($row['label'], true)); + return false; + } + + } else { + + $exp = $value; + if (!is_null($ret_value)) { + // we expect a different return value than our input value + // typically the difference is only the type + $exp = $ret_value; + } + + if ($row['label'] !== $exp) { + printf("[%03d + 4] %s - input = %s/%s, output = %s/%s\n", $offset, + $sql_type, var_export($exp, true), gettype($exp), + var_export($row['label'], true), gettype($row['label'])); + return false; + } + + } + + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, true); + $stmt = $db->query('SELECT id, label FROM test'); + $row_string = $stmt->fetch(PDO::FETCH_ASSOC); + $stmt->closeCursor(); + if ($row['label'] != $row_string['label']) { + printf("%s - STRINGIGY = %s, NATIVE = %s\n", $sql_type, var_export($row_string['label'], true), var_export($row['label'], true)); + return false; + } + + return true; + } + + $db = MySQLPDOTest::factory(); + $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); + $db->setAttribute(PDO::ATTR_EMULATE_PREPARES, false); + $db->setAttribute(PDO::ATTR_STRINGIFY_FETCHES, false); + + $stmt = $db->prepare('SELECT @@sql_mode AS _mode'); + $stmt->execute(); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + $real_as_float = (false === stristr($row['_mode'], "REAL_AS_FLOAT")) ? false : true; + + test_type($db, 100, 'REAL ZEROFILL', -1.01, NULL, '/^[0]*0$/'); + test_type($db, 110, 'REAL ZEROFILL', 1.01, NULL, ($real_as_float) ? '/^[0]*1\.0.*$/' : '/^[0]*1\.01$/'); + test_type($db, 120, 'REAL UNSIGNED ZEROFILL', 1.01, NULL, ($real_as_float) ? '/^[0]*1\..*$/' : '/^[0]*1\.01$/'); + + test_type($db, 130, 'DOUBLE ZEROFILL', -1.01, NULL, '/^[0]*0$/'); + test_type($db, 140, 'DOUBLE ZEROFILL', 1.01, NULL, '/^[0]*1\.01$/'); + test_type($db, 150, 'DOUBLE UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1\.01$/'); + + test_type($db, 160, 'FLOAT ZEROFILL', -1.01, NULL, '/^[0]*0$/'); + test_type($db, 170, 'FLOAT ZEROFILL', 1, NULL, '/^[0]*1$/'); + test_type($db, 180, 'FLOAT UNSIGNED ZEROFILL', -1, NULL, '/^[0]*0$/'); + + test_type($db, 190, 'DECIMAL ZEROFILL', -1.01, NULL, '/^[0]*0$/'); + test_type($db, 200, 'DECIMAL ZEROFILL', 1.01, NULL, '/^[0]*1$/'); + test_type($db, 210, 'DECIMAL UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1$/'); + + test_type($db, 220, 'NUMERIC ZEROFILL', -1, NULL, '/^[0]*0$/'); + test_type($db, 230, 'NUMERIC ZEROFILL', 1, NULL, '/^[0]*1$/'); + test_type($db, 240, 'NUMERIC UNSIGNED ZEROFILL', 1.01, NULL, '/^[0]*1$/'); + + echo "done!\n"; ?> --CLEAN-- <?php diff --git a/ext/pdo_mysql/tests/pecl_bug_5200.phpt b/ext/pdo_mysql/tests/pecl_bug_5200.phpt index d44a5c2282..941dc7836e 100644 --- a/ext/pdo_mysql/tests/pecl_bug_5200.phpt +++ b/ext/pdo_mysql/tests/pecl_bug_5200.phpt @@ -15,7 +15,7 @@ $db = PDOTest::test_factory(__DIR__. '/common.phpt'); $db->exec("CREATE TABLE test (bar INT NOT NULL, phase enum('please_select', 'I', 'II', 'IIa', 'IIb', 'III', 'IV'))"); foreach ($db->query('DESCRIBE test phase')->fetchAll(PDO::FETCH_ASSOC) as $row) { - print_r($row); + print_r($row); } ?> --CLEAN-- diff --git a/ext/pdo_mysql/tests/skipif.inc b/ext/pdo_mysql/tests/skipif.inc index e503f55b3c..65c7f34fc6 100644 --- a/ext/pdo_mysql/tests/skipif.inc +++ b/ext/pdo_mysql/tests/skipif.inc @@ -1,3 +1,3 @@ <?php if (!extension_loaded('pdo') || !extension_loaded('pdo_mysql')) - die('skip PDO_MySQL driver not loaded'); + die('skip PDO_MySQL driver not loaded'); diff --git a/ext/pdo_mysql/tests/table.inc b/ext/pdo_mysql/tests/table.inc index 54bf14f07d..9ef8fac134 100644 --- a/ext/pdo_mysql/tests/table.inc +++ b/ext/pdo_mysql/tests/table.inc @@ -1,7 +1,7 @@ <?php if (!$db) { - require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; - $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); + require dirname(__FILE__) . '/../../../ext/pdo/tests/pdo_test.inc'; + $db = PDOTest::test_factory(dirname(__FILE__) . '/common.phpt'); } // $db->exec('DROP TABLE IF EXISTS test'); $db->exec('CREATE TABLE test(id INT, label CHAR(1), PRIMARY KEY(id)) ENGINE=' . $engine); |