pdo_oci driver não encontrado, mas está listado no drivers disponíveis
Pergunta
Eu estou tentando conectar um Banco de dados Oracle 11g XE em execução no windows a partir de uma remota Ubuntu 14.04 server usando PDO_OCI em php.Eu segui este guia http://gist.github.com/tassoevan/10392954 (inúmeras vezes) e continuo recebendo o seguinte erro:
não pode encontrar o driver
No entanto, quando me chamar PDO::getAvailableDrivers() dá-me este:
Array ( [0] => mysql [1] => oci [2] => sqlite )
Nota:oci não estava lá antes de eu segui o guia no link acima.
Todos os outros tutoriais que eu poderia encontrar eram basicamente a mesma coisa.
Eu tenho o Oracle instant client instalado (versão 11.1).A versão mais recente não foi mesmo recebendo o driver para mostrar na lista de drivers disponíveis.
Também sei que o driver que é utilizado este método é mais antiga, mas não há guias passo a passo sobre como fazê-lo funcionar com a mais recente de uma.Eu sou novo para Bancos de dados Oracle, bem como o php, então, passo a passo ajuda seria muito apreciada.
ATUALIZAÇÃO:Eu descobri o problema de driver.Foi no meu código php, e algo muito bobo.Estou postando para o benefício dos outros.
Meu código original tinha "OCI" em letras maiúsculas quando a configuração de conexão.
$tns = "
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = myIP)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = XE)
)
)
";
try{
$pdo = new PDO('OCI:dbname='.$tns ,'username','password'); // Capital 'OCI' here is WRONG so changed to 'oci:dbname='
} catch(PDOException $e){
echo $e->getMessage();
}
print_r(PDO::getAvailableDrivers());
No entanto, estou tendo problemas ao consultar o Banco de dados.Parece que nada está acontecendo.Eu tenho permitido a porta 1521 no firewall do Windows para entrada e saída.Alguma sugestão?
Aqui é o meu código php:
$stmt = $pdo->prepare("SELECT * FROM `PDO`;");
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result;
Tabela PDO
só tem uma coluna com uma linha.
O banco de dados Oracle precisa ser configurado para permitir conexões remotas?
Solução
Havia dois problemas com o meu código PHP.1) a forma como O DOP conexão foi iniciada estava incorreto ...veja atualização no post original.Que resolveu o meu problema de driver.
2) o Oracle não parece como o backtick personagem, ao contrário do MySQL.Então eu tive que removê-los da minha consulta com este aspecto
$stmt = $pdo->prepare("SELECT * FROM PDO"); // Originally was SELECT * FROM `PDO`
$stmt->execute();
$result = $stmt->fetchColumn(0);
echo $result;
Isso resolveu o meu consulta ao banco de dados do problema.