Conexão com o Oracle. Seriamente precisando de ajuda

274 views
Skip to first unread message

Osman Siqueira Jr

unread,
May 3, 2016, 7:57:12 AM5/3/16
to livro-laravel
Senhores do grupo,
Já não sei mais o que fazer, por isso recorro a ajuda de vocês.
Tenho a seguinte situação:

1) Intalei o client do Oracle. Mas não foi o Instant Client
e nem quero mudar, pois todas as aplicações que possuo em 
outras plataformas acessam o banco oracle sem problemas com 
esse cliente.

2) Instalei o xampp mais novo, que está no site.

3) Alterei o php.ini para descomentar o ";" da linha que 
possui extension=php_pdo_oci.dll

4) Criei uma página php só com o comando phpinfo, e ela 
funcionou mostrando que o driver PDO tem ativo mysql, oci e
sqllite. Também ele diz que o drive PDO_OCI do oracle está 
enabled.

5) Fiz uma pagina com o código acessando o banco, e ele funcionou sem problemas, trazendo
todos os registros. O código era o seguinte:
  echo "<h1>Executando query</h1>";
  $stmt = $conexao->prepare("SELECT * FROM ATO");
  $stmt->execute();
  $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
  print_r($results);
  $stmt->closeCursor();


5) Abri o arquivo database.php e tinha uma instrução de conexão já para o mysql.
Apenas adicionei o código abaixo para acessar o Oracle.
  'oracle' => [
    'driver'        => 'oracle',
    'tns'           => env('DB_TNS', 'xxxxxxx'),
    'host'          => env('DB_HOST', '999.999.9.999'),
    'port'          => env('DB_PORT', '1521'),
    'database'      => env('DB_DATABASE', ''),
    'username'      => env('DB_USERNAME', 'xxxxxxxxx'),
    'password'      => env('DB_PASSWORD', 'xxxxxxxx'),
    'charset'       => env('DB_CHARSET', 'AL32UTF8'),
    'prefix'        => env('DB_PREFIX', ''),
    'prefix_schema' => env('DB_SCHEMA_PREFIX', ''),
    ],        
  ],

6) fiz um controller com o seguinte código:
<?php
  namespace intranet\Http\Controllers;
  class PrincipalController extends Controller {
    public function login() {
      echo "Efetuando conexão ...";
      $atos = DB::select('select * from ato');
      print_r($atos);  
    }
  }

7) Ele dá um erro com a seguinte mensagem:
FatalThrowableError in PrincipalController.php line 9:
Fatal error: Class 'intranet\Http\Controllers\DB' not found

8)Até agora, fiz tudo como estava indicado no livro. Só agora que 
resolvi apelar e fazer o que não tinha no livro, efetuando as 
alterações constantes nesse site: https://github.com/yajra/laravel-oci8
e o erro foi o seguinte:
RuntimeException in EncryptionServiceProvider.php line 45:
No supported encrypter found. The cipher and / or key length are invalid.

na mesma tela abaixo, ele também mostrou a seguinte mensagem de erro:
RuntimeException in EncryptionServiceProvider.php line 45:
No supported encrypter found. The cipher and / or key length are invalid.

Agora eu parei aqui. Estou sem saber o que fazer.
Alguém poderia me dizer?

Rodrigo Turini

unread,
May 3, 2016, 1:48:48 PM5/3/16
to Osman Siqueira Jr, livro-laravel
Oi Osman, tudo bem?

Está faltando importar o DB no seu controller. É só adicionar a linha antes de declarar a class:

use Illuminate\Support\Facades\DB;

--
Você recebeu essa mensagem porque está inscrito no grupo "livro-laravel" dos Grupos do Google.
Para cancelar inscrição nesse grupo e parar de receber e-mails dele, envie um e-mail para livro-larave...@googlegroups.com.
Para postar nesse grupo, envie um e-mail para livro-...@googlegroups.com.
Para ver essa discussão na Web, acesse https://groups.google.com/d/msgid/livro-laravel/28623ab4-301f-41a1-ba9c-70727da27302%40googlegroups.com.
Para mais opções, acesse https://groups.google.com/d/optout.

Osman Siqueira Jr

unread,
May 4, 2016, 10:36:38 AM5/4/16
to livro-laravel, osman.s...@gmail.com, rodrigo...@caelum.com.br

Prezado Senhor Rodrigo Turini,

Antes de mais nada,  obrigado  por  responder ao  meu 
desespero :-). Fiquei muito feliz em receber uma 
resposta.

Fiz o que o senhor recomendou: acrescentei a seguinte 
linha antes de declarar a classe do controller:
use Illuminate\Support\Facades\DB;

Dessa fez ele deu a seguinte mensagem de erro: 
whoops, looks like something went wrong.
FatalThrowableError in Oci8.php line 461:
Fatal Error: Call to undefined function Yajra\Pdo\oci_connect()

Fiz a seguinte modificação no Controller colocando
o mesmo código que consegui fazer anteriormente no PHP
puro, sem framework:

  echo "Efetuando conexão ... <br />";
  $tns = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = jucsrvdb01) (PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = DBJPE01)))";
  try {
    $conexao = new PDO("oci:dbname=" . $tns, "usuario","senha");
    echo "<h1>Conexão feita com sucesso</h1>";
  } catch(PDOException $e){
    echo($e->getMessage());
  }
  echo "<h1>Executando query</h1>";
  $stmt = $conexao->prepare("SELECT * FROM ATO");
  $stmt->execute();
  $results = $stmt->fetchAll(PDO::FETCH_ASSOC);
  print_r($results);
  $stmt->closeCursor();

Após salvar e recarregar o browser, ele deu a 
seguinte mensagem: 

whoops, looks like something went wrong.
FatalThrowableError in PrincipalController.php line 13:
Fatal Error: Class 'intranet\Http\Controllers\PDO' not found

Se o senhor ou alguém puder me dar algum esclarecimento
sobre remediar este erro, fico bastante agradecido. 
Obrigado,


seguinte mensagem: 

Rodrigo Turini

unread,
May 4, 2016, 11:29:07 AM5/4/16
to Osman Siqueira Jr, livro-laravel
Oi Osman

experimenta mudar o PDO::FETCH_ASSOC por \PDO::FETCH_ASSOC (bom a barra invertida antes)

o problema é basicamente o mesmo, você precisa dizer de onde o PDO vem (namespace), se não ele assume que é do mesmo diretório do seu projeto.

um abraço
Message has been deleted

Osman Siqueira Jr

unread,
May 5, 2016, 10:05:15 AM5/5/16
to livro-laravel, osman.s...@gmail.com, rodrigo...@caelum.com.br
Prezado Sr. Rodrigo Turini,

Gostaria imensamente de agradecer pela sua ajuda. Graças a sua orientação,
acabei fazendo o que eu queria fazer. Meu controller ficou assim:

<?php
  namespace intranet\Http\Controllers;
  use Illuminate\Support\Facades\DB;
  class PrincipalController extends Controller {
  public function login() {
  echo "Efetuando conexão ... <br />";
$tns = "(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = computador) (PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = SIDCONFIGURADO)))";
  try {
    $conexao = new \PDO("oci:dbname=" . $tns, "USUARIO","SENHA");
  echo "<h1>Conexão feita com sucesso</h1>";
} catch(PDOException $e){
    echo($e->getMessage());
  }
  echo "<h1>Executando query</h1>";
  $stmt = $conexao->prepare("SELECT * FROM ATO");
  $stmt->execute();
  $results = $stmt->fetchAll(\PDO::FETCH_ASSOC);
  print_r($results);
  $stmt->closeCursor();
  }
}

As barras invertidas antes da string "PDO" foram colocadas por sua orientação.
A aplicação conseguiu se conectar sem problema.
Obrigado, e agora vou partir para a construção de web services. 
Se tiver algum material ou quiser indicar algum, receberá toda atenção.

Sem mais,
Osman


Rodrigo Turini

unread,
May 5, 2016, 10:30:02 AM5/5/16
to Osman Siqueira Jr, livro-laravel
Oi Osman, que ótima noticia!

Espero que tenha gostado do livro e que esse conhecimento te ajude bastante.

grande abraço

Reply all
Reply to author
Forward
0 new messages