Exemplo n.º 1
0
 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;
 }