--TEST-- ODBC --SKIPIF-- 'ext/pdo/tests', 'ENV' => array() ); // try loading PDO driver using ENV vars and if none given, and on Windows, try using MS Access // and if not, skip the test // // try to use common PDO env vars, instead of PDO_ODBC specific if (false !== getenv('PDOTEST_DSN')) { // user should have to set PDOTEST_DSN so that: // 1. test is skipped if user doesn't want to test it, even if they have MS Access installed // 2. it detects if ODBC driver is not installed - to avoid test bug // 3. it detects if ODBC driver is installed - so test will be run // 4. so a specific ODBC driver can be tested - if system has multiple ODBC drivers $config['ENV']['PDOTEST_DSN'] = getenv('PDOTEST_DSN'); $config['ENV']['PDOTEST_USER'] = getenv('PDOTEST_USER'); $config['ENV']['PDOTEST_PASS'] = getenv('PDOTEST_PASS'); if (false !== getenv('PDOTEST_ATTR')) { $config['ENV']['PDOTEST_ATTR'] = getenv('PDOTEST_ATTR'); } } else if (false !== getenv('PDO_ODBC_TEST_DSN')) { // user set these from their shell instead $config['ENV']['PDOTEST_DSN'] = getenv('PDO_ODBC_TEST_DSN'); $config['ENV']['PDOTEST_USER'] = getenv('PDO_ODBC_TEST_USER'); $config['ENV']['PDOTEST_PASS'] = getenv('PDO_ODBC_TEST_PASS'); if (false !== getenv('PDO_ODBC_TEST_ATTR')) { $config['ENV']['PDOTEST_ATTR'] = getenv('PDO_ODBC_TEST_ATTR'); } } elseif (preg_match('/^WIN/i', PHP_OS)) { // on Windows and user didn't set PDOTEST_DSN, try this as a fallback: // check if MS Access DB is installed, and if yes, try using it. create a temporary MS access database. // $path = realpath(dirname(__FILE__)) . '\pdo_odbc.mdb'; if (!file_exists($path)) { try { // try to create database $adox = new COM('ADOX.Catalog'); $adox->Create('Provider=Microsoft.Jet.OLEDB.4.0;Data Source=' . $path); $adox = null; } catch (Exception $e) { } } if (file_exists($path)) { // database was created and written to file system $config['ENV']['PDOTEST_DSN'] = "odbc:Driver={Microsoft Access Driver (*.mdb)};Dbq=$path;Uid=Admin"; } // else: $config['ENV']['PDOTEST_DSN'] not set } // else: $config['ENV']['PDOTEST_DSN'] not set // test will be skipped. see SKIPIF section of long_columns.phpt # other magic autodetection here, eg: for DB2 by inspecting env /* $USER = 'db2inst1'; $PASSWD = 'ibmdb2'; $DBNAME = 'SAMPLE'; $CONNECTION = "odbc:DSN=$DBNAME;UID=$USER;PWD=$PASSWD;"; */ return $config;