function try_buffer_size($offset, $buffer_size) { try { $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, 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)); // 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(); $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'); } }
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; try { $db = new PDO($dsn, $user, $pass, array($option => $value)); if (!is_object($db) || !$ignore_diff && $value !== ($tmp = @$db->getAttribute($option))) { printf("[%03d] Execting '%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()); } }
<?php require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc'; $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); var_dump($create); $db = new PDO($dsn, $user, $pass, array(PDO::MYSQL_ATTR_INIT_COMMAND => $create)); $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('DROP TABLE IF EXISTS %s', $table)); print "done!";
$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!";
<?php require_once dirname(__FILE__) . 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!";