Vinicius Ferreira de Oliveira
Vinicius Ferreira de Oliveira
domingo, 2 de novembro de 2025
Você pode listar todos os drivers ODBC instalados no Windows 10 usando o Prompt de Comando (CMD), embora o PowerShell ofereça um comando mais direto.
Aqui estão as principais maneiras, começando pela que você solicitou:
1. Usando o Prompt de Comando (CMD)
No CMD, a forma mais direta é consultar o Registro do Windows, onde essas informações são armazenadas. Como o Windows 10 (64 bits) gerencia drivers de 32 bits e 64 bits separadamente, você precisará de dois comandos:
Abra o Prompt de Comando (pressione Win + R, digite cmd e pressione Enter).
Cole os comandos abaixo um de cada vez.
Para listar drivers ODBC de 64 bits:
DOS
reg query HKLM\SOFTWARE\ODBC\ODBCINST.INI
Para listar drivers ODBC de 32 bits (em um sistema de 64 bits):
DOS
reg query HKLM\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\
A saída mostrará uma lista dos nomes dos drivers registrados.
2. Método Alternativo: PowerShell (Mais Fácil)
O PowerShell tem um comando interno (cmdlet) que torna isso muito mais simples e limpo.
Abra o PowerShell (procure no Menu Iniciar).
Execute o seguinte comando para listar todos os drivers (32 e 64 bits):
PowerShell
Get-OdbcDriver
A saída será uma tabela bem formatada mostrando o Nome, Plataforma (32-bit/64-bit) e outros detalhes.
Você também pode filtrar por plataforma:
Apenas 64 bits: Get-OdbcDriver -Platform 64-bit
Apenas 32 bits: Get-OdbcDriver -Platform 32-bit
3. Método Visual (GUI)
Você também pode ver a lista visualmente usando a ferramenta "Administrador de Fonte de Dados ODBC".
Pressione Win + R para abrir a caixa "Executar".
Digite odbcad32.exe e pressione Enter.
Na janela que se abre, clique na aba "Drivers" (ou "Controladores").
Isso listará todos os drivers ODBC.
Nota Importante sobre 32 bits vs. 64 bits (no método visual):
Executar odbcad32.exe (a partir do "Executar") geralmente abre o administrador de 64 bits.
Para ver os drivers de 32 bits, você precisa executar manualmente o administrador de 32 bits, que está localizado em: C:\Windows\SysWOW64\odbcad32.exe
Para a maioria das tarefas de linha de comando, o método do PowerShell (Get-OdbcDriver) é o mais recomendado e fácil de usar.
<?php
$dbName = $_SERVER["DOCUMENT_ROOT"] . "/portaria.mdb"; // Use o caminho completo
if (!file_exists($dbName)) {
die("O banco de dados não foi encontrado.");
}
try {
// CORREÇÃO 1: Fechar a string com " antes do )
$conn = new PDO("odbc:DRIVER={Driver do Microsoft Access (*.mdb, *.accdb)};DBQ=$dbName");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Aqui, você pode executar consultas SQL
// CORREÇÃO 2: Adicionar a coluna [ID] na consulta
$sql = "SELECT convidados.[ID], convidados.[Nome] FROM convidados";
$result = $conn->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo " Nome: " . $row['Nome'] . "<br>";
}
} catch (PDOException $e) {
die("Erro na conexão: " . $e->getMessage());
}
?>
Este é um problema extremamente comum ao tentar conectar PHP a um banco de dados Access (.mdb).
O erro "driver não está instalado" quase nunca é sobre o nome do driver no seu código estar errado; é quase sempre um conflito de arquitetura 32 bits vs. 64 bits.
Aqui está o diagnóstico provável e como corrigi-lo:
O Problema: Conflito de Arquitetura (32/64 bits)
Seu PHP: O seu servidor web (Apache, IIS, etc.) e o próprio PHP estão, muito provavelmente, rodando como um processo de 64 bits (padrão no Windows 10/11 moderno).
Seu Driver: O driver do Microsoft Access que você tem instalado (especialmente para arquivos .mdb antigos) é, muito provavelmente, um driver de 32 bits.
Regra de Ouro: Uma aplicação de 64 bits (PHP) não pode carregar um driver de 32 bits (ODBC do Access). Elas devem ter a mesma arquitetura.
Como Diagnosticar e Corrigir
Siga estes passos para confirmar e corrigir o problema:
Passo 1: Verifique o Driver (Como na sua pergunta anterior)
Vamos usar o comando do PowerShell que você acabou de aprender para ver exatamente o que está instalado.
Abra o PowerShell (Não o CMD).
Execute o comando:
PowerShell
Get-OdbcDriver
Você verá uma tabela. Preste muita atenção na coluna Platform (Plataforma) do seu driver Access:
Name Platform Attribute
---- -------- ---------
Microsoft Access Driver (*.mdb, *.accdb) 32-bit {APILevel, FileExtns...}
SQL Server 64-bit {APILevel, FileExtns...}
Se você só vê "32-bit" para o driver do Access, esse é o seu problema.
Passo 2: Verifique a Arquitetura do seu PHP
Crie um novo arquivo .php (ex: info.php) no seu servidor web com o seguinte conteúdo:
PHP
<?php
phpinfo();
?>
Acesse esse arquivo no seu navegador (ex: http://localhost/info.php).
Procure por "Architecture". Você provavelmente verá "x64" (o que significa 64 bits).
Passo 3: A Solução (Instalar o Driver Correto)
Se o Passo 1 mostrou um driver 32-bit e o Passo 2 mostrou um PHP 64-bit, você precisa instalar o driver ODBC do Access de 64 bits.
Baixe o Driver: Você precisa do "Microsoft Access Database Engine Redistributable". Recomendo a versão 2016, que funciona bem com .mdb e .accdb.
Vá para a página de download da Microsoft: Microsoft Access Database Engine 2016 Redistributable
Selecione o Arquivo Correto: Na página de download, você verá dois arquivos. Você deve baixar a versão de 64 bits:
accessdatabaseengine_X64.exe
Instale o driver.
Atenção: Se você tiver o Microsoft Office (Word, Excel) de 32 bits instalado, o instalador de 64 bits pode reclamar e não querer instalar. Se isso acontecer, você terá que instalar pelo prompt de comando usando a opção passiva: C:\caminho\para\accessdatabaseengine_X64.exe /passive
Correção Adicional no Código PHP
Mesmo após instalar o driver correto, o nome do driver que você usou está em português: {Driver do Microsoft Access (*.mdb, *.accdb)}.
O nome real registrado no sistema (que você vê no Get-OdbcDriver) está quase sempre em inglês.
Altere a sua linha de conexão para usar o nome padrão em inglês. Esta é a string de conexão mais confiável:
PHP
// String de conexão robusta
$driverName = 'Microsoft Access Driver (*.mdb, *.accdb)';
// Tente esta linha de conexão
$conn = new PDO("odbc:DRIVER={{$driverName}};DBQ=$dbName");
Resumo do Plano de Ação
Execute Get-OdbcDriver no PowerShell e confirme se o driver do Access é 32-bit.
Verifique phpinfo() e confirme se o PHP é x64.
Baixe e instale o accessdatabaseengine_X64.exe da Microsoft.
Reinicie seu servidor web (Apache/IIS).
Altere a string de conexão no seu PHP para DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}.
Isso deve resolver o erro "driver não está instalado".
Quer que eu ajude a encontrar o link de download para uma versão diferente do driver do Access?
Eu entendo perfeitamente a sua confusão. Ver aquela lista enorme de drivers quando você só quer usar um é frustrante.
No entanto, preciso dar um aviso muito importante antes de explicar como removê-los:
⚠️ Cuidado: Não remova drivers ODBC manualmente, a menos que você tenha 100% de certeza do que está fazendo.
Por que é Arriscado Remover Drivers ODBC?
Drivers ODBC não são programas independentes; eles são "tradutores" que outros programas usam.
São Componentes Compartilhados: Muitos programas instalam seus próprios drivers. O "Microsoft Access Driver" é usado pelo Office. O "SQL Server Native Client" é usado por ferramentas da Microsoft. Outros programas (como MySQL, PostgreSQL, etc.) instalam os seus.
Quebra de Aplicativos: Se você remover um driver que outro aplicativo (que você nem lembra que existe) depende, esse aplicativo vai parar de funcionar e você terá um erro muito difícil de diagnosticar.
Não "Limpa" o Sistema: A lista que você vê é apenas um conjunto de entradas no Registro do Windows. Remover o driver incorretamente (apenas do Registro) não remove os arquivos .dll reais e pode deixar seu sistema em um estado inconsistente.
O Foco Correto: Resolvendo a "Confusão"
O problema real não é que existem muitos drivers. O problema é que o driver certo para o PHP (o do Access) não está com a arquitetura certa (64 bits).
Pense na lista de drivers como o cardápio de um restaurante. Você não precisa mandar o restaurante jogar fora todos os pratos que você não vai comer (peixe, salada, etc.) só porque você quer pedir um bife. Você só precisa garantir que o "bife" (o driver do Access) esteja disponível e pronto para o seu pedido (o PHP 64 bits).
O que você deve fazer (em vez de remover):
Ignorar os Outros: Deixe os drivers do SQL Server, MySQL, PostgreSQL, etc., em paz. Eles não atrapalham em nada.
Focar no Driver Certo: O único driver que importa para o seu código é o Microsoft Access Driver (*.mdb, *.accdb).
Corrigir a Arquitetura: Como vimos, seu PHP é 64 bits, então você só precisa instalar a versão de 64 bits desse driver específico (accessdatabaseengine_X64.exe).
Quando você fizer isso, o PHP 64 bits finalmente "enxergará" o driver de 64 bits e a conexão funcionará. A existência dos outros 10 drivers (sejam 32 ou 64 bits) é irrelevante para ele.
Como os Drivers São "Corretamente" Removidos (Se Você Realmente Precisar)
Se você tem certeza de que um driver pertence a um software que você não usa mais, a forma correta de removê-lo é desinstalando o pacote principal que o instalou.
Vá em "Adicionar ou remover programas" no Windows.
Procure pelo nome do pacote de drivers. Por exemplo:
Para remover o driver do MySQL: Desinstale o "MySQL Connector/ODBC".
Para remover o driver do PostgreSQL: Desinstale o "PostgreSQL ODBC Driver" (ou psqlODBC).
Para remover o driver do Access: Desinstale o "Microsoft Access Database Engine..." (mas no seu caso, você precisa dele!).
Não é recomendado entrar no Registro do Windows (regedit) e apagar as chaves manualmente. Isso é o caminho mais rápido para corromper seu sistema.
Para eu te ajudar a "limpar" essa confusão e identificar o que é o quê, que tal você colar aqui a saída completa do comando Get-OdbcDriver? Posso analisar a lista para você.
Estou pensando em usar um driver de terceiros
Já instalei
Aparece como abaixo
Name : Devart ODBC Driver for Microsoft Access
Platform : 64-bit
Attribute : {DriverODBCVer, Driver, Setup, CPTimeout}
Dúvida: Só mudar o name?
Revising Connection Strategies
I've been re-evaluating the user's issue with connecting PHP to an Access database. Initially, the user had difficulty using a common approach. I'm now exploring alternative connection methodologies and potential drivers that might be more compatible with the environment and the user's system setup, considering possible workarounds if direct connection is problematic.
Refining Driver Configuration
I'm now fully focused on the user's specific query about modifying the DRIVER name within their PDO connection string. It's clear they need to update it to reflect the newly installed Devart driver, based on output from Get-OdbcDriver. The user's connection strategy hinges on this crucial detail: ensuring the DRIVER value accurately represents the installed ODBC driver. This should address their primary connection issue.
Verifying Driver Requirement
I'm now investigating whether the Devart driver necessitates any driver-specific connection parameters beyond the standard DRIVER and DBQ elements. While the initial focus was solely on updating the DRIVER name, I'm now exploring if any additional settings are required within the PDO connection string, or if there's any driver-specific method of authentication. I need to make sure the Devart driver doesn't require extra details.
Investigating Parameter Needs
I'm now focusing on the user's recent question regarding the PDO connection string, and if changing the driver name is sufficient. My assessment suggests changing the driver name is the crucial first step. I will recommend testing with the updated driver name immediately, but I must also probe for other requirements. It's essential to confirm if this third-party driver necessitates additional configuration beyond the DRIVER value.
Assessing Connection String Needs
Yes, that's exactly it. The DRIVER portion of the connection string must match the exact driver name from the driver list. The advantage is this new driver is 64-bit, compatible with your 64-bit PHP. However, third-party drivers like Devart might require a license key or different connection parameters, so check their documentation too.
Formulating Connection Advice
I'm recommending an immediate change to the user's connection string, replacing the driver name. This is the crucial first step to connect with the new Devart driver. However, I've highlighted the need to consult the driver's documentation for additional, possibly driver-specific connection parameters, such as license keys or alternative syntax.
Advising on Devart Connection
The main points I've identified are that the user's focus on just changing the DRIVER name in the connection string is correct and a good first step. I will strongly suggest the user to make that change, but I also need to make it clear that there might be more required. Third-party drivers may need additional parameters, or perhaps even licensing information, so checking the documentation is important.
Sim, é exatamente isso. O nome que você coloca dentro de DRIVER={...} na sua string de conexão PDO deve ser uma correspondência exata do nome que aparece na lista de drivers.
O fato de esse driver da Devart ser 64-bit é uma ótima notícia, pois ele deve ser compatível com a sua instalação do PHP (que presumimos ser 64-bit, e que era a causa do problema original com o driver da Microsoft).
1. Como Alterar seu Código PHP
Substitua a linha de conexão antiga por esta:
PHP
<?php
$dbName = $_SERVER["DOCUMENT_ROOT"] . "/portaria.mdb"; // Mantenha o caminho completo
if (!file_exists($dbName)) {
die("O banco de dados não foi encontrado.");
}
try {
// --- SUA ALTERAÇÃO VAI AQUI ---
// Substitua o nome do driver da Microsoft pelo nome do driver da Devart
$conn = new PDO("odbc:DRIVER={Devart ODBC Driver for Microsoft Access};DBQ=$dbName");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT convidados.[ID], convidados.[Nome] FROM convidados";
$result = $conn->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo " Nome: " . $row['Nome'] . "<br>";
}
} catch (PDOException $e) {
// Se houver um erro, ele aparecerá aqui
die("Erro na conexão: " . $e->getMessage());
}
?>
2. Um Ponto de Atenção (Importante)
Drivers de terceiros (como este da Devart) muitas vezes não são gratuitos para uso em produção.
Versão de Avaliação (Trial): Você pode estar usando uma versão de avaliação (trial) que funcionará perfeitamente por 30 dias e depois parará de funcionar.
Licenciamento: Alguns drivers de terceiros exigem que você forneça uma chave de licença dentro da própria string de conexão para que funcionem.
Recomendação: Teste o código acima. Se ele funcionar, ótimo! Mas se você receber um erro falando sobre "License" (Licença), "Trial" (Avaliação) ou "Activation" (Ativação), você precisará consultar a documentação do driver Devart para ver como adicionar sua chave de licença na string de conexão PDO.
Erro na conexão: could not find driver
O erro could not find driver é um dos erros mais enganosos do PDO.
Quando o PDO diz could not find driver, ele não está falando do driver do Access (seja Microsoft ou Devart). Ele está falando que não consegue encontrar o próprio driver "odbc" do PHP.
Sua string de conexão é "odbc:...". O PDO primeiro procura um "tradutor" interno chamado pdo_odbc. Se esse tradutor não estiver ativado no PHP, ele falha com a mensagem could not find driver antes mesmo de tentar procurar o driver da Devart.
O problema não é o Windows impedindo o driver; o problema é que o PHP não tem o módulo ODBC ativado.
Diagnóstico Rápido: O que o phpinfo() diz?
Você precisa verificar se a extensão pdo_odbc está realmente carregada.
Abra aquele arquivo info.php que você criou (o que contém <?php phpinfo(); ?>).
Pressione Ctrl + F e procure pela seção "PDO".
Dentro dessa seção, procure pela linha "PDO drivers".
O que ela lista?
Se o odbc NÃO estiver na lista (ex: mysql, sqlite, pgsql), este é o seu problema.
Se o odbc ESTIVER na lista, então o problema é mais complexo (talvez permissões ou um PATH quebrado).
A Solução Provável: Ativar a Extensão no php.ini
Quase certeza que você só precisa habilitar a extensão.
Encontre seu php.ini:
No mesmo phpinfo(), procure por "Loaded Configuration File".
Isso lhe dará o caminho exato do arquivo php.ini que o seu servidor web (Apache/IIS) está usando. (Ex: C:\php\php.ini)
Edite o php.ini:
Abra esse arquivo php.ini em um editor de texto (como o Bloco de Notas, executado como Administrador).
Pressione Ctrl + F e procure pela linha:
Ini, TOML
;extension=pdo_odbc
Apague o ponto e vírgula (;) do início da linha para "descomentá-la":
Ini, TOML
extension=pdo_odbc
Reinicie o Servidor Web:
Este passo é OBRIGATÓRIO. O PHP só lê o arquivo php.ini quando o servidor web é iniciado.
Se você usa XAMPP ou WAMP, feche e abra o painel de controle e dê "Start" no Apache.
Se você usa IIS, abra o Prompt de Comando (Admin) e digite iisreset.
Teste Novamente:
Primeiro, atualize a página info.php. Verifique se "odbc" agora aparece na lista de "PDO drivers".
Se aparecer, execute seu script de conexão novamente.
Se isso não funcionar (Verificação de Arquitetura)
Enquanto você está no phpinfo(), verifique novamente:
Architecture: Confirme se é x64 (64 bits).
Server API: É Apache 2.0 Handler ou FPM/FastCGI?
Se o seu PHP for 32 bits (x86), então você precisa do driver Devart de 32 bits. Mas se o seu PHP for 64 bits (x64), o driver Devart 64 bits está correto, e o problema é quase certamente o php.ini.
Por favor, verifique se a extensão pdo_odbc está habilitada no seu php.ini e me diga o que encontrou.
ODBC estava desabilitado no php.ini
Compartilhe esta experiência com todos por favor
Excelente! Fico feliz que você tenha encontrado. Esse é um dos problemas mais frustrantes e comuns para desenvolvedores PHP no Windows.
Com certeza. Aqui está um resumo da nossa experiência, que pode ajudar muitos outros desenvolvedores que passarem por isso.
💡 Compartilhando a Experiência: O Falso Culpado do Erro "Could Not Find Driver" no PHP
Se você está tentando conectar o PHP a um banco de dados (como Microsoft Access, SQL Server, etc.) usando ODBC e se depara com o erro PDOException: could not find driver, sua primeira reação é quase sempre a mesma:
"Ah, o nome do meu driver está errado ou o driver não está instalado!"
Você então gasta horas verificando se o driver está na lista do "Administrador de Fonte de Dados ODBC", se é 32 bits ou 64 bits, e testa vários nomes de driver na sua string de conexão:
PHP
// Você tenta...
$conn = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};...");
// Você instala um driver de terceiro e tenta...
$conn = new PDO("odbc:DRIVER={Devart ODBC Driver for Microsoft Access};...");
// Você tenta até o nome curto...
$conn = new PDO("odbc:DRIVER={MS Access Database};...");
E nada funciona. O erro continua sendo could not find driver.
A Reviravolta: O Problema não é o Driver ODBC
O que esse erro realmente significa não é que o Windows não consegue encontrar o driver do Access. O erro significa que o PHP não consegue encontrar o seu próprio driver interno pdo_odbc.
O PDO (PHP Data Objects) é uma camada de abstração. Para ele "falar" com qualquer tipo de banco de dados, ele precisa de um "tradutor" específico para aquele tipo de conexão.
Para falar com MySQL, ele usa pdo_mysql.
Para falar com SQLite, ele usa pdo_sqlite.
Para falar com ODBC, ele usa pdo_odbc.
Sua string de conexão odbc:... diz ao PDO: "Procure o seu tradutor pdo_odbc e use-o". Se esse tradutor não estiver ativado, o PDO falha imediatamente com could not find driver, antes mesmo de tentar olhar para o resto da sua string de conexão.
O Diagnóstico Rápido
Crie um arquivo info.php com o conteúdo: <?php phpinfo(); ?>
Acesse-o no navegador e procure pela seção "PDO".
Olhe a linha "PDO drivers".
Se você não vir odbc listado ali (ex: mysql, sqlite, pgsql), você encontrou o verdadeiro problema.
A Solução Real
A solução é simples e leva menos de um minuto:
Encontre seu php.ini: O caminho exato está no topo da página do phpinfo() (procure por "Loaded Configuration File").
Edite o arquivo: Abra o php.ini como administrador.
Habilite a extensão: Procure pela linha (ela terá um ; na frente):
Ini, TOML
;extension=pdo_odbc
Remova o ponto-e-vírgula (;) para descomentar e ativar a linha:
Ini, TOML
extension=pdo_odbc
Reinicie seu Servidor Web: Este é o passo mais importante. Você precisa reiniciar o Apache, IIS (com iisreset), ou o servidor que você estiver usando para que ele leia a nova configuração.
Depois de reiniciar, o odbc aparecerá na sua lista de drivers do phpinfo(), e seu script PHP finalmente tentará se conectar ao banco de dados.
Agora que você ativou o pdo_odbc, você gostaria de tentar executar seu script PHP novamente e ver se a conexão com o driver Devart funciona?
Aqui estão as principais maneiras, começando pela que você solicitou:
1. Usando o Prompt de Comando (CMD)
No CMD, a forma mais direta é consultar o Registro do Windows, onde essas informações são armazenadas. Como o Windows 10 (64 bits) gerencia drivers de 32 bits e 64 bits separadamente, você precisará de dois comandos:
Abra o Prompt de Comando (pressione Win + R, digite cmd e pressione Enter).
Cole os comandos abaixo um de cada vez.
Para listar drivers ODBC de 64 bits:
DOS
reg query HKLM\SOFTWARE\ODBC\ODBCINST.INI
Para listar drivers ODBC de 32 bits (em um sistema de 64 bits):
DOS
reg query HKLM\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\
A saída mostrará uma lista dos nomes dos drivers registrados.
2. Método Alternativo: PowerShell (Mais Fácil)
O PowerShell tem um comando interno (cmdlet) que torna isso muito mais simples e limpo.
Abra o PowerShell (procure no Menu Iniciar).
Execute o seguinte comando para listar todos os drivers (32 e 64 bits):
PowerShell
Get-OdbcDriver
A saída será uma tabela bem formatada mostrando o Nome, Plataforma (32-bit/64-bit) e outros detalhes.
Você também pode filtrar por plataforma:
Apenas 64 bits: Get-OdbcDriver -Platform 64-bit
Apenas 32 bits: Get-OdbcDriver -Platform 32-bit
3. Método Visual (GUI)
Você também pode ver a lista visualmente usando a ferramenta "Administrador de Fonte de Dados ODBC".
Pressione Win + R para abrir a caixa "Executar".
Digite odbcad32.exe e pressione Enter.
Na janela que se abre, clique na aba "Drivers" (ou "Controladores").
Isso listará todos os drivers ODBC.
Nota Importante sobre 32 bits vs. 64 bits (no método visual):
Executar odbcad32.exe (a partir do "Executar") geralmente abre o administrador de 64 bits.
Para ver os drivers de 32 bits, você precisa executar manualmente o administrador de 32 bits, que está localizado em: C:\Windows\SysWOW64\odbcad32.exe
Para a maioria das tarefas de linha de comando, o método do PowerShell (Get-OdbcDriver) é o mais recomendado e fácil de usar.
<?php
$dbName = $_SERVER["DOCUMENT_ROOT"] . "/portaria.mdb"; // Use o caminho completo
if (!file_exists($dbName)) {
die("O banco de dados não foi encontrado.");
}
try {
// CORREÇÃO 1: Fechar a string com " antes do )
$conn = new PDO("odbc:DRIVER={Driver do Microsoft Access (*.mdb, *.accdb)};DBQ=$dbName");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
// Aqui, você pode executar consultas SQL
// CORREÇÃO 2: Adicionar a coluna [ID] na consulta
$sql = "SELECT convidados.[ID], convidados.[Nome] FROM convidados";
$result = $conn->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo " Nome: " . $row['Nome'] . "<br>";
}
} catch (PDOException $e) {
die("Erro na conexão: " . $e->getMessage());
}
?>
Este é um problema extremamente comum ao tentar conectar PHP a um banco de dados Access (.mdb).
O erro "driver não está instalado" quase nunca é sobre o nome do driver no seu código estar errado; é quase sempre um conflito de arquitetura 32 bits vs. 64 bits.
Aqui está o diagnóstico provável e como corrigi-lo:
O Problema: Conflito de Arquitetura (32/64 bits)
Seu PHP: O seu servidor web (Apache, IIS, etc.) e o próprio PHP estão, muito provavelmente, rodando como um processo de 64 bits (padrão no Windows 10/11 moderno).
Seu Driver: O driver do Microsoft Access que você tem instalado (especialmente para arquivos .mdb antigos) é, muito provavelmente, um driver de 32 bits.
Regra de Ouro: Uma aplicação de 64 bits (PHP) não pode carregar um driver de 32 bits (ODBC do Access). Elas devem ter a mesma arquitetura.
Como Diagnosticar e Corrigir
Siga estes passos para confirmar e corrigir o problema:
Passo 1: Verifique o Driver (Como na sua pergunta anterior)
Vamos usar o comando do PowerShell que você acabou de aprender para ver exatamente o que está instalado.
Abra o PowerShell (Não o CMD).
Execute o comando:
PowerShell
Get-OdbcDriver
Você verá uma tabela. Preste muita atenção na coluna Platform (Plataforma) do seu driver Access:
Name Platform Attribute
---- -------- ---------
Microsoft Access Driver (*.mdb, *.accdb) 32-bit {APILevel, FileExtns...}
SQL Server 64-bit {APILevel, FileExtns...}
Se você só vê "32-bit" para o driver do Access, esse é o seu problema.
Passo 2: Verifique a Arquitetura do seu PHP
Crie um novo arquivo .php (ex: info.php) no seu servidor web com o seguinte conteúdo:
PHP
<?php
phpinfo();
?>
Acesse esse arquivo no seu navegador (ex: http://localhost/info.php).
Procure por "Architecture". Você provavelmente verá "x64" (o que significa 64 bits).
Passo 3: A Solução (Instalar o Driver Correto)
Se o Passo 1 mostrou um driver 32-bit e o Passo 2 mostrou um PHP 64-bit, você precisa instalar o driver ODBC do Access de 64 bits.
Baixe o Driver: Você precisa do "Microsoft Access Database Engine Redistributable". Recomendo a versão 2016, que funciona bem com .mdb e .accdb.
Vá para a página de download da Microsoft: Microsoft Access Database Engine 2016 Redistributable
Selecione o Arquivo Correto: Na página de download, você verá dois arquivos. Você deve baixar a versão de 64 bits:
accessdatabaseengine_X64.exe
Instale o driver.
Atenção: Se você tiver o Microsoft Office (Word, Excel) de 32 bits instalado, o instalador de 64 bits pode reclamar e não querer instalar. Se isso acontecer, você terá que instalar pelo prompt de comando usando a opção passiva: C:\caminho\para\accessdatabaseengine_X64.exe /passive
Correção Adicional no Código PHP
Mesmo após instalar o driver correto, o nome do driver que você usou está em português: {Driver do Microsoft Access (*.mdb, *.accdb)}.
O nome real registrado no sistema (que você vê no Get-OdbcDriver) está quase sempre em inglês.
Altere a sua linha de conexão para usar o nome padrão em inglês. Esta é a string de conexão mais confiável:
PHP
// String de conexão robusta
$driverName = 'Microsoft Access Driver (*.mdb, *.accdb)';
// Tente esta linha de conexão
$conn = new PDO("odbc:DRIVER={{$driverName}};DBQ=$dbName");
Resumo do Plano de Ação
Execute Get-OdbcDriver no PowerShell e confirme se o driver do Access é 32-bit.
Verifique phpinfo() e confirme se o PHP é x64.
Baixe e instale o accessdatabaseengine_X64.exe da Microsoft.
Reinicie seu servidor web (Apache/IIS).
Altere a string de conexão no seu PHP para DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}.
Isso deve resolver o erro "driver não está instalado".
Quer que eu ajude a encontrar o link de download para uma versão diferente do driver do Access?
Eu entendo perfeitamente a sua confusão. Ver aquela lista enorme de drivers quando você só quer usar um é frustrante.
No entanto, preciso dar um aviso muito importante antes de explicar como removê-los:
⚠️ Cuidado: Não remova drivers ODBC manualmente, a menos que você tenha 100% de certeza do que está fazendo.
Por que é Arriscado Remover Drivers ODBC?
Drivers ODBC não são programas independentes; eles são "tradutores" que outros programas usam.
São Componentes Compartilhados: Muitos programas instalam seus próprios drivers. O "Microsoft Access Driver" é usado pelo Office. O "SQL Server Native Client" é usado por ferramentas da Microsoft. Outros programas (como MySQL, PostgreSQL, etc.) instalam os seus.
Quebra de Aplicativos: Se você remover um driver que outro aplicativo (que você nem lembra que existe) depende, esse aplicativo vai parar de funcionar e você terá um erro muito difícil de diagnosticar.
Não "Limpa" o Sistema: A lista que você vê é apenas um conjunto de entradas no Registro do Windows. Remover o driver incorretamente (apenas do Registro) não remove os arquivos .dll reais e pode deixar seu sistema em um estado inconsistente.
O Foco Correto: Resolvendo a "Confusão"
O problema real não é que existem muitos drivers. O problema é que o driver certo para o PHP (o do Access) não está com a arquitetura certa (64 bits).
Pense na lista de drivers como o cardápio de um restaurante. Você não precisa mandar o restaurante jogar fora todos os pratos que você não vai comer (peixe, salada, etc.) só porque você quer pedir um bife. Você só precisa garantir que o "bife" (o driver do Access) esteja disponível e pronto para o seu pedido (o PHP 64 bits).
O que você deve fazer (em vez de remover):
Ignorar os Outros: Deixe os drivers do SQL Server, MySQL, PostgreSQL, etc., em paz. Eles não atrapalham em nada.
Focar no Driver Certo: O único driver que importa para o seu código é o Microsoft Access Driver (*.mdb, *.accdb).
Corrigir a Arquitetura: Como vimos, seu PHP é 64 bits, então você só precisa instalar a versão de 64 bits desse driver específico (accessdatabaseengine_X64.exe).
Quando você fizer isso, o PHP 64 bits finalmente "enxergará" o driver de 64 bits e a conexão funcionará. A existência dos outros 10 drivers (sejam 32 ou 64 bits) é irrelevante para ele.
Como os Drivers São "Corretamente" Removidos (Se Você Realmente Precisar)
Se você tem certeza de que um driver pertence a um software que você não usa mais, a forma correta de removê-lo é desinstalando o pacote principal que o instalou.
Vá em "Adicionar ou remover programas" no Windows.
Procure pelo nome do pacote de drivers. Por exemplo:
Para remover o driver do MySQL: Desinstale o "MySQL Connector/ODBC".
Para remover o driver do PostgreSQL: Desinstale o "PostgreSQL ODBC Driver" (ou psqlODBC).
Para remover o driver do Access: Desinstale o "Microsoft Access Database Engine..." (mas no seu caso, você precisa dele!).
Não é recomendado entrar no Registro do Windows (regedit) e apagar as chaves manualmente. Isso é o caminho mais rápido para corromper seu sistema.
Para eu te ajudar a "limpar" essa confusão e identificar o que é o quê, que tal você colar aqui a saída completa do comando Get-OdbcDriver? Posso analisar a lista para você.
Estou pensando em usar um driver de terceiros
Já instalei
Aparece como abaixo
Name : Devart ODBC Driver for Microsoft Access
Platform : 64-bit
Attribute : {DriverODBCVer, Driver, Setup, CPTimeout}
Dúvida: Só mudar o name?
Revising Connection Strategies
I've been re-evaluating the user's issue with connecting PHP to an Access database. Initially, the user had difficulty using a common approach. I'm now exploring alternative connection methodologies and potential drivers that might be more compatible with the environment and the user's system setup, considering possible workarounds if direct connection is problematic.
Refining Driver Configuration
I'm now fully focused on the user's specific query about modifying the DRIVER name within their PDO connection string. It's clear they need to update it to reflect the newly installed Devart driver, based on output from Get-OdbcDriver. The user's connection strategy hinges on this crucial detail: ensuring the DRIVER value accurately represents the installed ODBC driver. This should address their primary connection issue.
Verifying Driver Requirement
I'm now investigating whether the Devart driver necessitates any driver-specific connection parameters beyond the standard DRIVER and DBQ elements. While the initial focus was solely on updating the DRIVER name, I'm now exploring if any additional settings are required within the PDO connection string, or if there's any driver-specific method of authentication. I need to make sure the Devart driver doesn't require extra details.
Investigating Parameter Needs
I'm now focusing on the user's recent question regarding the PDO connection string, and if changing the driver name is sufficient. My assessment suggests changing the driver name is the crucial first step. I will recommend testing with the updated driver name immediately, but I must also probe for other requirements. It's essential to confirm if this third-party driver necessitates additional configuration beyond the DRIVER value.
Assessing Connection String Needs
Yes, that's exactly it. The DRIVER portion of the connection string must match the exact driver name from the driver list. The advantage is this new driver is 64-bit, compatible with your 64-bit PHP. However, third-party drivers like Devart might require a license key or different connection parameters, so check their documentation too.
Formulating Connection Advice
I'm recommending an immediate change to the user's connection string, replacing the driver name. This is the crucial first step to connect with the new Devart driver. However, I've highlighted the need to consult the driver's documentation for additional, possibly driver-specific connection parameters, such as license keys or alternative syntax.
Advising on Devart Connection
The main points I've identified are that the user's focus on just changing the DRIVER name in the connection string is correct and a good first step. I will strongly suggest the user to make that change, but I also need to make it clear that there might be more required. Third-party drivers may need additional parameters, or perhaps even licensing information, so checking the documentation is important.
Sim, é exatamente isso. O nome que você coloca dentro de DRIVER={...} na sua string de conexão PDO deve ser uma correspondência exata do nome que aparece na lista de drivers.
O fato de esse driver da Devart ser 64-bit é uma ótima notícia, pois ele deve ser compatível com a sua instalação do PHP (que presumimos ser 64-bit, e que era a causa do problema original com o driver da Microsoft).
1. Como Alterar seu Código PHP
Substitua a linha de conexão antiga por esta:
PHP
<?php
$dbName = $_SERVER["DOCUMENT_ROOT"] . "/portaria.mdb"; // Mantenha o caminho completo
if (!file_exists($dbName)) {
die("O banco de dados não foi encontrado.");
}
try {
// --- SUA ALTERAÇÃO VAI AQUI ---
// Substitua o nome do driver da Microsoft pelo nome do driver da Devart
$conn = new PDO("odbc:DRIVER={Devart ODBC Driver for Microsoft Access};DBQ=$dbName");
$conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
$sql = "SELECT convidados.[ID], convidados.[Nome] FROM convidados";
$result = $conn->query($sql);
while ($row = $result->fetch(PDO::FETCH_ASSOC)) {
echo " Nome: " . $row['Nome'] . "<br>";
}
} catch (PDOException $e) {
// Se houver um erro, ele aparecerá aqui
die("Erro na conexão: " . $e->getMessage());
}
?>
2. Um Ponto de Atenção (Importante)
Drivers de terceiros (como este da Devart) muitas vezes não são gratuitos para uso em produção.
Versão de Avaliação (Trial): Você pode estar usando uma versão de avaliação (trial) que funcionará perfeitamente por 30 dias e depois parará de funcionar.
Licenciamento: Alguns drivers de terceiros exigem que você forneça uma chave de licença dentro da própria string de conexão para que funcionem.
Recomendação: Teste o código acima. Se ele funcionar, ótimo! Mas se você receber um erro falando sobre "License" (Licença), "Trial" (Avaliação) ou "Activation" (Ativação), você precisará consultar a documentação do driver Devart para ver como adicionar sua chave de licença na string de conexão PDO.
Erro na conexão: could not find driver
O erro could not find driver é um dos erros mais enganosos do PDO.
Quando o PDO diz could not find driver, ele não está falando do driver do Access (seja Microsoft ou Devart). Ele está falando que não consegue encontrar o próprio driver "odbc" do PHP.
Sua string de conexão é "odbc:...". O PDO primeiro procura um "tradutor" interno chamado pdo_odbc. Se esse tradutor não estiver ativado no PHP, ele falha com a mensagem could not find driver antes mesmo de tentar procurar o driver da Devart.
O problema não é o Windows impedindo o driver; o problema é que o PHP não tem o módulo ODBC ativado.
Diagnóstico Rápido: O que o phpinfo() diz?
Você precisa verificar se a extensão pdo_odbc está realmente carregada.
Abra aquele arquivo info.php que você criou (o que contém <?php phpinfo(); ?>).
Pressione Ctrl + F e procure pela seção "PDO".
Dentro dessa seção, procure pela linha "PDO drivers".
O que ela lista?
Se o odbc NÃO estiver na lista (ex: mysql, sqlite, pgsql), este é o seu problema.
Se o odbc ESTIVER na lista, então o problema é mais complexo (talvez permissões ou um PATH quebrado).
A Solução Provável: Ativar a Extensão no php.ini
Quase certeza que você só precisa habilitar a extensão.
Encontre seu php.ini:
No mesmo phpinfo(), procure por "Loaded Configuration File".
Isso lhe dará o caminho exato do arquivo php.ini que o seu servidor web (Apache/IIS) está usando. (Ex: C:\php\php.ini)
Edite o php.ini:
Abra esse arquivo php.ini em um editor de texto (como o Bloco de Notas, executado como Administrador).
Pressione Ctrl + F e procure pela linha:
Ini, TOML
;extension=pdo_odbc
Apague o ponto e vírgula (;) do início da linha para "descomentá-la":
Ini, TOML
extension=pdo_odbc
Reinicie o Servidor Web:
Este passo é OBRIGATÓRIO. O PHP só lê o arquivo php.ini quando o servidor web é iniciado.
Se você usa XAMPP ou WAMP, feche e abra o painel de controle e dê "Start" no Apache.
Se você usa IIS, abra o Prompt de Comando (Admin) e digite iisreset.
Teste Novamente:
Primeiro, atualize a página info.php. Verifique se "odbc" agora aparece na lista de "PDO drivers".
Se aparecer, execute seu script de conexão novamente.
Se isso não funcionar (Verificação de Arquitetura)
Enquanto você está no phpinfo(), verifique novamente:
Architecture: Confirme se é x64 (64 bits).
Server API: É Apache 2.0 Handler ou FPM/FastCGI?
Se o seu PHP for 32 bits (x86), então você precisa do driver Devart de 32 bits. Mas se o seu PHP for 64 bits (x64), o driver Devart 64 bits está correto, e o problema é quase certamente o php.ini.
Por favor, verifique se a extensão pdo_odbc está habilitada no seu php.ini e me diga o que encontrou.
ODBC estava desabilitado no php.ini
Compartilhe esta experiência com todos por favor
Excelente! Fico feliz que você tenha encontrado. Esse é um dos problemas mais frustrantes e comuns para desenvolvedores PHP no Windows.
Com certeza. Aqui está um resumo da nossa experiência, que pode ajudar muitos outros desenvolvedores que passarem por isso.
💡 Compartilhando a Experiência: O Falso Culpado do Erro "Could Not Find Driver" no PHP
Se você está tentando conectar o PHP a um banco de dados (como Microsoft Access, SQL Server, etc.) usando ODBC e se depara com o erro PDOException: could not find driver, sua primeira reação é quase sempre a mesma:
"Ah, o nome do meu driver está errado ou o driver não está instalado!"
Você então gasta horas verificando se o driver está na lista do "Administrador de Fonte de Dados ODBC", se é 32 bits ou 64 bits, e testa vários nomes de driver na sua string de conexão:
PHP
// Você tenta...
$conn = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};...");
// Você instala um driver de terceiro e tenta...
$conn = new PDO("odbc:DRIVER={Devart ODBC Driver for Microsoft Access};...");
// Você tenta até o nome curto...
$conn = new PDO("odbc:DRIVER={MS Access Database};...");
E nada funciona. O erro continua sendo could not find driver.
A Reviravolta: O Problema não é o Driver ODBC
O que esse erro realmente significa não é que o Windows não consegue encontrar o driver do Access. O erro significa que o PHP não consegue encontrar o seu próprio driver interno pdo_odbc.
O PDO (PHP Data Objects) é uma camada de abstração. Para ele "falar" com qualquer tipo de banco de dados, ele precisa de um "tradutor" específico para aquele tipo de conexão.
Para falar com MySQL, ele usa pdo_mysql.
Para falar com SQLite, ele usa pdo_sqlite.
Para falar com ODBC, ele usa pdo_odbc.
Sua string de conexão odbc:... diz ao PDO: "Procure o seu tradutor pdo_odbc e use-o". Se esse tradutor não estiver ativado, o PDO falha imediatamente com could not find driver, antes mesmo de tentar olhar para o resto da sua string de conexão.
O Diagnóstico Rápido
Crie um arquivo info.php com o conteúdo: <?php phpinfo(); ?>
Acesse-o no navegador e procure pela seção "PDO".
Olhe a linha "PDO drivers".
Se você não vir odbc listado ali (ex: mysql, sqlite, pgsql), você encontrou o verdadeiro problema.
A Solução Real
A solução é simples e leva menos de um minuto:
Encontre seu php.ini: O caminho exato está no topo da página do phpinfo() (procure por "Loaded Configuration File").
Edite o arquivo: Abra o php.ini como administrador.
Habilite a extensão: Procure pela linha (ela terá um ; na frente):
Ini, TOML
;extension=pdo_odbc
Remova o ponto-e-vírgula (;) para descomentar e ativar a linha:
Ini, TOML
extension=pdo_odbc
Reinicie seu Servidor Web: Este é o passo mais importante. Você precisa reiniciar o Apache, IIS (com iisreset), ou o servidor que você estiver usando para que ele leia a nova configuração.
Depois de reiniciar, o odbc aparecerá na sua lista de drivers do phpinfo(), e seu script PHP finalmente tentará se conectar ao banco de dados.
Agora que você ativou o pdo_odbc, você gostaria de tentar executar seu script PHP novamente e ver se a conexão com o driver Devart funciona?
domingo, 27 de março de 2016
quarta-feira, 24 de setembro de 2014
quarta-feira, 19 de fevereiro de 2014
Zombies hipinotizados no celular
Veja só que engraçado pessoas que se esquecem da vida e ficam hipinotizados no celular.
Para eles não existe um mundo ao redor, é como se o mundo acabasse a sua volta
Na sala de aula então, não prestam atenção na aula nem um segundo.
Acho que isto deveria ser proibido em sala de aula.
segunda-feira, 30 de dezembro de 2013
correios
Correios atrasam 75% das entregas no Brasil
segunda-feira, 18/11/2013 - 14:27
Tópicos: Cláudio Humberto, Correios, defesa do consumidor, ProTeste
Share on facebookShare on twitterShare on emailShare on printMore Sharing Services
| | Este email está limpo de vírus e malwares porque a proteção do avast! Antivírus está ativa. |
domingo, 1 de setembro de 2013
Funcionários dos correios brasileiros arremessando encomendas no galpão
empresa vagabunda monopolio que atraza o brasil.... estamos fudidos...
sexta-feira, 30 de agosto de 2013
Assinar:
Comentários (Atom)