}
    return true;
}
require_once dirname(__FILE__) . 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);
<?php

require_once dirname(__FILE__) . DIRECTORY_SEPARATOR . 'mysql_pdo_test.inc';
try {
    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', $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) {
    }
    $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 dirname(__FILE__) . '/mysql_pdo_test.inc';
$db = MySQLPDOTest::factory();
$db->exec('DROP TABLE IF EXISTS test');
@unlink(MySQLPDOTest::getTempDir() . DIRECTORY_SEPARATOR . 'pdoblob.tst');