コード例 #1
0
            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));
    }
/* 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);
コード例 #3
0
        }
        printf("[%03d] '%s' has failed, [%s] %s\n", $offset, $sql, $db->errorCode(), implode(' ', $db->errorInfo()));
        return false;
    }
    return true;
}
require_once dirname(__FILE__) . 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)));
コード例 #4
0
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);
    }
    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
    */
} catch (PDOException $e) {
    printf("[001] %s, [%s] %s\n", $e->getMessage(), $db->errorCode(), implode(' ', $db->errorInfo()));
}
コード例 #5
0
        $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;
    }
    return true;
}
require_once dirname(__FILE__) . 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);
    // 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()));
}
print "done!";
require dirname(__FILE__) . '/mysql_pdo_test.inc';
$db = MySQLPDOTest::factory();
@$db->exec('DROP TABLE IF EXISTS test');