Acabei de instalar o Debian Lenny com Apache, MySQL e PHP e estou recebendo uma PDOException could not find driver
.
Esta é a linha de código específica à qual se refere:
$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
DB_HOST
, DB_NAME
, DB_USER
, EDB_PASS
são constantes que eu definidos. Funciona bem no servidor de produção (e na minha configuração anterior do Ubuntu Server).
Isso tem algo a ver com minha instalação do PHP?
Pesquisando na Internet não ajudou, tudo o que recebo é troca de especialistas e exemplos, mas não há soluções.
php.ini' file and uncomment
extensão = php_pdo_mysql.dll. The path to your
. O arquivo php.ini` pode ser encontrado consultando o seu phpinfo ().extension=msql.so
e funciona!docker exec
entrar no contêiner e executardocker-php-ext-install pdo pdo_mysql
.Respostas:
Você precisa ter um módulo chamado pdo_mysql. Procurando seguir em phpinfo (),
fonte
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
O dsn no seu código revela que você está tentando se conectar ao driver mysql. Sua mensagem de erro indica que este driver não está disponível.
Verifique se você possui a extensão mysql instalada no seu servidor.
No Ubuntu / Debian, você verifica o pacote com:
Instale o pacote php5-mysql se você não o tiver.
No Ubuntu / Debian você pode usar:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Por fim, para fazê-lo funcionar, você precisará reiniciar o servidor da web:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
fonte
Atualização : as versões mais recentes devem usar o
php-sqlite3
pacote em vez dephp5-sqlite
. Então use isso, se você estiver usando uma versão recente do ubuntu:A resposta original à pergunta está aqui:
Se o seu phpinfo () não está mostrando a linha pdo_sqlite (no meu caso, no meu Ubuntu Server), você só precisa executar as linhas acima e então estará pronto.
fonte
pdo_sqlite
e não instalou,php5-sqlite
obtém apenas umaPDOException
informação sem informações sobre o sqlite ausente e tenta instalarphp5-mysql
duas vezes.Para versões mais recentes do Ubuntu que possuem PHP 7.0, você pode obter o
php-mysql
pacote:Em seguida, reinicie o servidor:
fonte
Eu tive o mesmo problema. A solução depende do sistema operacional. No meu caso, eu tenho o debian, para resolvê-lo:
Instale o php-mysql e o php7.0-mysql
Editei minha
php.ini
localização em /etc/php/7.0/apache2/php.iniEm seguida, reinicie o apache:
Isso resolve meu problema
fonte
a2dismod php5
,a2enmod php7.0
eservice apache2 restart
finalmente me voltar a funcionar.Na minha máquina Windows, tive que fornecer o caminho absoluto para o diretório de extensão no meu php.ini:
extension_dir = "c:\php5\ext"
fonte
extension_dir = "ext"
, mas não com este.No Ubuntu basta executar
fonte
sudo apt-get install php5-pgsql
funcionou bem no ubuntu e php 7
fonte
Verifique se o módulo está disponível com
php -m | grep pdo_mysql
.Caso contrário, para o PHP 7.2, você pode instalar o pacote relevante com
sudo apt install php7.2-mysql
.Use comando semelhante em outras versões do PHP e gerenciadores de pacotes.
fonte
Ao adicioná-los ao seu php.ini, verifique se a referência php_pdo.dll é a primeira antes das DLLs dos drivers db, caso contrário, isso também causará essa mensagem de erro. Adicione-os assim:
fonte
php_pdo.dll
módulo não é mais necessário (não existe). php.net/manual/en/pdo.installation.php é provavelmente a resposta final para esta pergunta.Você checou seu php.ini (verifique a localização correta com phpinfo ()) se o MySQL e o driver estão instalados corretamente?
fonte
[MySQL]
Pois
PHP 5.5
noCentOS
eu corrigi isso instalando ophp55-mysqlnd
pacote.Para obter ajuda na instalação, escreva um comentário, pois depende da maneira como o PHP está instalado no seu sistema. Os repositórios disponíveis são
webtatic
eremi
.fonte
para Windows 8.1 / 10 em: \\ arquivo php.ini, remova o comentário da linha "extension = pdo_mysql"
fonte
No meu caso, minha string DSN estava incorreta, especificamente não continha
mysql://.
Eu esperaria uma mensagem de erro diferente, talvez algo como 'String DSN não especifique driver / protocolo'.A adição
mysql://
ao início da string DSN resolveu o problema.fonte
Passei o último dia tentando descobrir por que estava recebendo o seguinte erro. Estou executando o Ubuntu 14.04.
O Problema:
Notei que minha versão do PHP-CLI estava executando o php7.0, mas php_info () (a versão da Web) exibia o php 5.5.9. Embora o php_info () tenha dito que o pdo estava ativado, o uso da linha de comando (CLI) não estava reconhecendo o comando pdo_mysql. Acontece que o mysql foi ativado para minha versão antiga, mas não para a versão CLI. Tudo o que fiz foi instalar o mysql para php7.0 e ele foi capaz de funcionar.
Isto é o que funcionou:
Para verificar a versão:
Para instalar o mysql for php7.0
1) verifique se a sua versão da CLI é igual à sua versão da web
2) Se forem diferentes, verifique se a sua versão da CLI possui o plug-in mysql, pois não vem com ele como padrão.
fonte
Verifique se extension_dir no arquivo de configuração php está definido corretamente. Tente comentar / descomentar algumas extensões e veja se isso está refletido no phpinfo (). Caso contrário, o arquivo de configuração php não pode ser carregado (local errado) extension_dir é comentado ou definido para o local errado.
fonte
O problema é um php ausente na biblioteca mysql. No CentOs, eu o corrigi executando
# yum install php-mysql
e reiniciando o apache com# /bin/systemctl restart httpd.service
Observe que a nomeação é um pouco diferente das distribuições baseadas no debian / ubuntu, php-> php5 e httpd-> apache2.fonte
Eu tive o mesmo problema durante a execução de testes com o php.ini separado. Eu tive que adicionar essas linhas ao meu próprio arquivo php.ini:
Aviso: exatamente nesta ordem
fonte
Eu recomendo extremamente, em
mysqllnd
vez demysql
por causa de você ter muitos problemas, como conversão de número e tipo de bit avalia o problema commysql
extensão.no ubuntu install
mysqllnd
com o seguinte comando:fonte
Corrigi esse problema no meu Debian 6. Normalmente, acabei de instalar o
php5-common
pacote. Após a instalação, você deve reiniciar o servidor da web (apache ou nginx, dependendo de qual você instalou). Então eu apenas faço umlsof
no processo apache id (lsof -p process_id
) da seguinte maneira:Como você pode ver acima, os módulos são instalados em um caminho de arquivo não conhecido ou guiado pelo caminho comum da biblioteca: /
usr/lib/php5/20090626/
. Para sua instalação, pode ser diferente, mas apenas o caminho de pdo_mysql.so, pdo.so, mysqli.so. Portanto, é por isso que o Drupal ou qualquer outro mecanismo php não conseguiu encontrar a biblioteca e mostra esse erro:PDOException: could not find driver
Eu só não sei por que ele está instalado em um caminho tão estranho, para mim é apenas um bug no script de instalação pacote de biblioteca no debian 6. I resolveu o problema criando um símbolo para todos os arquivos sob
/usr/lib/php5/20090626/
a/usr/lib/php5/
com este comando:ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
fonte
Isso funcionou para mim.
fonte
Eu enfrentei o mesmo problema depois que removi o pacote php5 (que inclui todos os drivers também) para instalar o pacote php7. Na verdade, eu instalei o pacote php7 sem um módulo mysql.
Consegui resolvê-lo digitando o terminal:
1) $ apt-cache search php7 que lista todos os módulos, olhando através dos módulos que encontrei,
php7.0-mysql - módulo MySQL para PHP
2) $ sudo apt-get install php7.0-mysql
É isso aí. Funcionou para mim no meu sistema linux.
(use a versão php apropriada, a sua pode ser php5)
fonte
Apenas mais uma coisa para confirmar, já que algumas pessoas estão copiando / colando códigos de exemplo da Internet para começar. Verifique se o MySQL foi digitado aqui:
Em alguns exemplos, isso mostra
fonte
No meu caso, eu estava usando DOP com php-cli, e funcionou bem.
Somente quando tentei me conectar pelo apache, obtive o problema do "driver ausente", que não entendi direito.
Um simples
apt-get install php-mysql
resolveu. (Os créditos do Ubuntu 16.04 / PHP7. Vão para a resposta selecionada e o comentário de Ivan)Espero que possa ajudar.
fonte
Para aqueles que usam o Symfony2 / 3 e se perguntam por que está recebendo esse erro. Se você estiver usando "mapping_types", poderá encontrar este erro. O motivo é que "mapping_types" é colocado no nível errado. Por exemplo :
Este "mapping_types" deve ser colocado neste nível:
Eu espero que isso ajude
Encontrei a solução aqui: https://github.com/doctrine/DoctrineBundle/issues/327
fonte
Onde quer que eu vá, leio que o caminho de
extension_dir
deve ser alteradoext
para um caminho absoluto. Funcionou para mim. No entanto, ao tentar construir um servidor no PC do meu colega, tive que deixar o valor emext
vez de colocar um caminho absoluto.Se você colocou um caminho absoluto e a extensão ainda não foi encontrada, considere tentar ambos com o caminho absoluto e
ext
.fonte
A instalação incorreta do PHP estava sendo chamada
Eu estava com o mesmo problema. E espero que isso ajude alguém que está tendo um problema semelhante ao meu.
Cenário
Criei um
phpinfo.php
arquivo napublic
pasta e execute ophpinfo()
para procurar a localização do meuphp.ini
arquivo.Localização do PHP.ini =
c:\xampp\php\php.ini
Problema A
chamada
c:\xampp\htdocs> php -v
retornou,PHP 7.2.3
masphpinfo.php
mostrouPHP 7.2.2
.Solução em
vez de ligar
que me deu esse erro, eu usei
e funcionou.
fonte
Verifique o caminho correto em extension_dir no seu phpinfo ().
fonte
Eu lutei e lutei com "apt install php-mysql php7toInfinity e não se esqueça do sqlite-what-ever's" e simplesmente não consegui me livrar dessa mensagem de erro até voltar ao básico e redefinir as permissões de arquivo no site em questão.
Esses três comandos redefinem as permissões de arquivo e pasta no site e o fazem funcionar novamente.
fonte
Eu tive a mesma exceção ao tentar usar
pdo_sqlite
. O problema era que os links automaticamente criados20-pdo_sqlite.ini
e os20-sqlite3.ini
links simbólicos (in/etc/php5/mods-enabled
) foram quebrados.Removendo os links simbólicos quebrados e adicionando-os manualmente com:
sudo ln -s /etc/php5/mods-avaliable/pdo_sqlite.ini /etc/php5/mods-enabled/20-pdo_sqlite.ini
sudo ln -s /etc/php5/mods-avaliable/sqlite3.ini /etc/php5/mods-enabled/20-sqlite3.ini
corrigiu o problema.
fonte