Je viens d'installer Debian Lenny avec Apache, MySQL et PHP et je reçois une exception PDOException could not find driver
.
Il s'agit de la ligne de code spécifique à laquelle il se réfère:
$dbh = new PDO('mysql:host=' . DB_HOST . ';dbname=' . DB_NAME, DB_USER, DB_PASS)
DB_HOST
, DB_NAME
, DB_USER
Et DB_PASS
sont des constantes que j'ai définies. Cela fonctionne très bien sur le serveur de production (et sur ma configuration précédente d'Ubuntu Server).
Est-ce quelque chose à voir avec mon installation PHP?
La recherche sur Internet n'a pas aidé, tout ce que j'obtiens, c'est l'échange d'experts et d'exemples, mais pas de solutions.
php.ini' file and uncomment
extension = php_pdo_mysql.dll. The path to your
Le fichier php.ini` peut être trouvé en regardant votre phpinfo ().extension=msql.so
et ça marche!docker exec
dans le conteneur et exécuterdocker-php-ext-install pdo pdo_mysql
.Réponses:
Vous devez avoir un module appelé pdo_mysql. Vous cherchez à suivre dans phpinfo (),
la source
pdo_mysql
?sudo systemctl restart httpd.service
sudo apt-get install php-mysql
Le DSN dans votre code révèle que vous essayez de vous connecter avec le pilote mysql. Votre message d'erreur indique que ce pilote n'est pas disponible.
Vérifiez que l'extension mysql est installée sur votre serveur.
Dans Ubuntu / Debian, vous vérifiez le paquet avec:
Installez le paquet php5-mysql si vous ne l'avez pas.
Dans Ubuntu / Debian, vous pouvez utiliser:
sudo apt-get install php5-mysql
sudo apt-get install php7.0-mysql
Enfin, pour le faire fonctionner, vous devrez redémarrer votre serveur web:
sudo /etc/init.d/apache2 restart
sudo /etc/init.d/nginx restart
la source
Mise à jour : les versions plus récentes devraient utiliser le
php-sqlite3
package au lieu dephp5-sqlite
. Utilisez donc ceci, si vous utilisez une version récente d'ubuntu:La réponse originale à la question est ici:
Si votre phpinfo () n'affiche pas la ligne pdo_sqlite (dans mon cas, sur mon serveur Ubuntu), il vous suffit d'exécuter les lignes ci-dessus et vous serez prêt à partir.
la source
pdo_sqlite
et n'avez pas installé,php5-sqlite
vous obtenez uniquement unPDOException
sans aucune information sur sqlite manquant et essayez d'installerphp5-mysql
deux fois.Pour les versions plus récentes d'Ubuntu qui ont PHP 7.0, vous pouvez obtenir le
php-mysql
package:Redémarrez ensuite votre serveur:
la source
J'ai eu le même problème. La solution dépend du système d'exploitation. Dans mon cas, j'ai Debian, donc pour le résoudre:
Installez php-mysql et php7.0-mysql
J'ai modifié ma
php.ini
localisation sur /etc/php/7.0/apache2/php.iniRedémarrez ensuite apache:
Cela résout mon problème
la source
a2dismod php5
,a2enmod php7.0
etservice apache2 restart
enfin me suis à nouveau opérationnel.Sur ma machine Windows, je devais donner le chemin absolu vers l'extension dir dans mon php.ini:
extension_dir = "c:\php5\ext"
la source
extension_dir = "ext"
, mais pas avec celle-ci.Sur Ubuntu, il suffit d'exécuter
la source
sudo apt-get install php5-pgsql
a bien fonctionné sur ubuntu et php 7
la source
Vérifiez si le module est disponible avec
php -m | grep pdo_mysql
.Sinon, pour PHP 7.2, vous pouvez installer le package approprié avec
sudo apt install php7.2-mysql
.Utilisez une commande similaire sur les autres versions de PHP et les gestionnaires de packages.
la source
Lorsque vous les ajoutez dans votre php.ini, assurez-vous que la référence php_pdo.dll est la première avant les DLL des pilotes db, sinon cela provoquera également ce message d'erreur. Ajoutez-les comme ceci:
la source
php_pdo.dll
module n'est plus requis (n'existe plus). php.net/manual/en/pdo.installation.php est probablement la réponse ultime à cette question.Avez-vous vérifié votre php.ini (vérifiez l'emplacement correct avec phpinfo ()) si MySQL et le pilote sont installés correctement?
la source
[MySQL]
Pour
PHP 5.5
surCentOS
j'ai corrigé cela en installant lephp55-mysqlnd
package.Pour obtenir de l'aide sur l'installation, écrivez un commentaire car cela dépend de la façon dont PHP est installé sur votre système. Les repo disponibles sont
webtatic
etremi
.la source
pour Windows 8.1 / 10 dans le fichier: \\ php.ini, vous devez décommenter la ligne "extension = pdo_mysql"
la source
Dans mon cas, ma chaîne DSN était incorrecte, en particulier, elle ne contenait pas,
mysql://.
je m'attendais à un message d'erreur différent, peut-être quelque chose comme «La chaîne DSN ne spécifie pas le pilote / protocole».L'ajout
mysql://
au début de la chaîne DSN a résolu le problème.la source
J'ai passé la dernière journée à essayer de comprendre pourquoi j'obtenais l'erreur suivante. J'utilise Ubuntu 14.04.
Le problème:
j'ai remarqué que ma version PHP-CLI exécutait php7.0 mais php_info () (la version Web) affichait php 5.5.9. Même si php_info () a déclaré que pdo était activé, l'utilisation de la ligne de commande (CLI) ne reconnaissait pas la commande pdo_mysql. Il s'avère que mysql était activé pour mon ancienne version mais pas la version CLI. Tout ce que j'ai fait, c'est installer mysql pour php7.0 et il a pu fonctionner.
C'est ce qui a fonctionné:
Pour vérifier la version:
Pour installer mysql pour php7.0
1) assurez-vous que votre version CLI est la même que votre version web
2) S'ils sont différents, assurez-vous que votre version CLI possède le plug-in mysql car il ne vient pas avec elle par défaut.
la source
Vérifiez si extension_dir dans le fichier de configuration php défini correctement. Essayez de commenter / décommenter certaines extensions et voyez si cela se reflète sur phpinfo (). Si ce n'est pas le cas, le fichier de configuration php ne peut pas être chargé (mauvais emplacement). Extension_dir est commenté ou défini au mauvais emplacement.
la source
Le problème est un php manquant à la bibliothèque mysql. Dans CentOs, je l'ai corrigé en exécutant
# yum install php-mysql
puis en redémarrant apache avec# /bin/systemctl restart httpd.service
Remarque: le nom est légèrement différent des distributions basées sur debian / ubuntu, php-> php5 et httpd-> apache2.la source
J'ai eu le même problème lors de l'exécution de tests avec php.ini séparé. J'ai dû ajouter ces lignes à mon propre fichier php.ini:
Remarque: exactement dans cet ordre
la source
Je recommande fortement
mysqllnd
au lieu demysql
car vous auriez beaucoup de problèmes comme la conversion de nombre et le type de bit évalue le problème avecmysql
extension.sur l'installation d'ubuntu
mysqllnd
avec la commande suivante:la source
J'ai résolu ce problème sur ma Debian 6. Normalement, je venais juste d'installer le
php5-common
paquet. Après l'installation, vous devez redémarrer votre serveur Web (apache ou nginx selon celui que vous avez installé). Ensuite, je fais juste unlsof
sur le processus apache id (lsof -p process_id
) comme suit:Comme vous pouvez le voir ci-dessus, les modules sont installés sur un chemin de fichier inconnu ou guidé par le chemin de bibliothèque commun: /
usr/lib/php5/20090626/
. Pour votre installation, il peut être différent, mais uniquement le chemin de pdo_mysql.so, pdo.so, mysqli.so. Donc, c'est pourquoi Drupal ou tout autre moteur php n'a pas pu trouver la bibliothèque et montre cette erreur:PDOException: could not find driver
Je ne sais pas pourquoi il est installé sur un chemin bizarre, pour moi il est juste un bug dans le script d'installation de package bibliothèque dans debian 6. Je résolu le problème en créant une symbolique pour tous les fichiers sous
/usr/lib/php5/20090626/
à/usr/lib/php5/
cette commande:ln -s /usr/lib/php5/20090626/* /usr/lib/php5/
la source
Cela a fonctionné pour moi.
la source
J'ai rencontré le même problème après avoir supprimé le package php5 (qui inclut également tous les pilotes) afin d'installer le package php7. J'ai en fait installé le paquet php7 sans module mysql.
J'ai réussi à le résoudre en tapant dans le terminal:
1) $ apt-cache search php7 qui répertorie tous les modules, en parcourant les modules que j'ai trouvés,
php7.0-mysql - Module MySQL pour PHP
2) $ sudo apt-get install php7.0-mysql
C'est tout. Cela a fonctionné pour moi dans mon système Linux.
(utilisez la version php appropriée, la vôtre pourrait être php5)
la source
Juste une autre chose à confirmer car certaines personnes copient / collent un exemple de code sur Internet pour commencer. Assurez-vous que MySQL est entré ici:
Dans certains exemples, cela montre
la source
Dans mon cas, j'utilisais PDO avec php-cli, et cela a bien fonctionné.
Ce n'est que lorsque j'ai essayé de me connecter à partir d'Apache que j'ai eu le problème du "pilote manquant", que je ne comprenais pas très bien.
Un simple
apt-get install php-mysql
résolu. (Ubuntu 16.04 / PHP7. Les crédits vont à la réponse sélectionnée et au commentaire d'Ivan)J'espère que cela peut aider.
la source
Pour ceux qui utilisent Symfony2 / 3 et se demandent pourquoi vous obtenez cette erreur. Si vous utilisez "mapping_types", vous pouvez rencontrer cette erreur. La raison en est que "mapping_types" est placé au mauvais niveau. Par exemple :
Ce "mapping_types" doit être placé à ce niveau:
J'espère que ça aide
J'ai trouvé la solution ici: https://github.com/doctrine/DoctrineBundle/issues/327
la source
Partout où je vais, je lis que le chemin de
extension_dir
doit être changé deext
à un chemin absolu. Ça a marché pour moi. Cependant, lorsque j'ai essayé de construire un serveur du PC de mon collègue, j'ai dû laisser la valeur àext
au lieu de mettre un chemin absolu.Si vous avez mis un chemin absolu et que c'est le cas, l'extension n'est toujours pas trouvée, envisagez d'essayer à la fois avec le chemin absolu et
ext
.la source
Une installation incorrecte de PHP était appelée
Je rencontrais le même problème. Et j'espère que cela aiderait quelqu'un qui a un problème similaire à moi.
Scénario
J'ai créé un
phpinfo.php
fichier dans lepublic
dossier et exécuté lephpinfo()
pour rechercher l'emplacement de monphp.ini
fichier.Emplacement PHP.ini =
c:\xampp\php\php.ini
Problème L'
appel
c:\xampp\htdocs> php -v
est revenuPHP 7.2.3
mais aphpinfo.php
montréPHP 7.2.2
.Solution au
lieu d'appeler
qui m'a donné cette erreur, j'ai utilisé
et ça a marché.
la source
Vérifiez le chemin correct dans extension_dir dans votre phpinfo ().
la source
J'ai lutté et lutté avec "apt install php-mysql php7toInfinity et n'oubliez pas sqlite-what-ever's" et je ne pouvais tout simplement pas me débarrasser de ce message d'erreur avant de revenir aux bases et de réinitialiser les autorisations de fichier sur le site Web Dans la question.
Ces 3 commandes réinitialisent les autorisations de fichiers et de dossiers sur le site Web et le font fonctionner à nouveau.
la source
J'ai eu la même exception lors de la tentative d'utilisation
pdo_sqlite
. Le problème était que les liens créés automatiquement20-pdo_sqlite.ini
et les20-sqlite3.ini
liens symboliques (in/etc/php5/mods-enabled
) étaient rompus.Supprimer les liens symboliques rompus et les ajouter manuellement avec:
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
résolu le problème.
la source