public static function open($name) { // verifica se existe arquivo de configuração para este banco de dados $filename = TApplication::get_root_dir() . "/model/app.config/{$name}.ini"; if (file_exists($filename)) { // lê o INI e retorna um array $db = parse_ini_file($filename); } else { // se não existir, lança um erro throw new Exception("Arquivo '{$name}' não encontrado"); } // lê as informações contidas no arquivo $user = isset($db['user']) ? $db['user'] : null; $pass = isset($db['pass']) ? $db['pass'] : null; $name = isset($db['name']) ? $db['name'] : null; $host = isset($db['host']) ? $db['host'] : null; $type = isset($db['type']) ? $db['type'] : null; $port = isset($db['port']) ? $db['port'] : null; // descobre qual o tipo (driver) de banco de dados a ser utilizado switch ($type) { case 'mysql': $port = $port ? $port : '3306'; TApplication::addCurrentTime('Pré acesso'); $conn = new PDO("mysql:host={$host};port={$port};dbname={$name}", $user, $pass); TApplication::addCurrentTime('Acesso ao Banco'); break; case 'pgsql': $port = $port ? $port : '5432'; $conn = new PDO("pgsql:dbname={$name}; user={$user}; password={$pass}; host={$host};port={$port}"); break; case 'sqlite': $conn = new PDO("sqlite:{$name}"); break; case 'ibase': $conn = new PDO("firebird:dbname={$name}", $user, $pass); break; case 'oci8': $conn = new PDO("oci:dbname={$name}", $user, $pass); break; case 'mssql': $conn = new PDO("mssql:host={$host},1433;dbname={$name}", $user, $pass); break; default: throw new Exception("Banco de Dados '{$type}' não suportado"); } // define para que o PDO lance exceções na ocorrência de erros $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); // define para que o PDO substitua strings vazias por valores nulos $conn->setAttribute(PDO::ATTR_ORACLE_NULLS, PDO::NULL_EMPTY_STRING); // retorna o objeto instanciado. return $conn; }