我刚刚安装了Debian Lenny与Apache, MySQL和PHP,我收到一个PDOException无法找到驱动程序。
这是它所引用的特定代码行:
$dbh = new PDO('mysql:host=')。DB_HOST。”;dbname = '。Db_name, db_user, db_pass)
DB_HOST、DB_NAME、DB_USER和DB_PASS是我已经定义的常量。它在生产服务器(以及我之前的Ubuntu server设置)上运行良好。
这与我的PHP安装有关吗?
在网上搜索也没有帮助,我得到的都是专家交流和例子,但没有解决方案。
代码中的dsn显示您正在尝试连接mysql驱动程序。您的错误消息表明该驱动程序不可用。
检查你的服务器上是否安装了mysql扩展。
在Ubuntu/Debian中,你可以用以下方法检查包:
dpkg --get-selections | grep php | grep mysql
如果没有php5-mysql包,请安装。
在Ubuntu/Debian中,你可以使用:
PHP5: sudo apt-get install PHP5 -mysql
PHP7: sudo apt-get安装php7.0-mysql
最后,为了让它工作,你需要重新启动你的web服务器:
Apache: sudo /etc/init.d/apache2 restart
Nginx: sudo /etc/init.d/nginx restart
我在我的Debian 6上修复了这个问题。
通常我只是安装了php5-common package。安装后,你必须重新启动你的web服务器(apache或nginx取决于你安装的哪个)。
然后我只是在apache进程id (lsof -p process_id)上做一个lsof,如下所示:
sudo lsof -p 1399 #replace 1399 by your apache process id
apache2 1399 root mem REG 254,2 80352 227236 /usr/lib/php5/20090626/xmlrpc.so
apache2 1399 root mem REG 254,2 166496 227235 /usr/lib/php5/20090626/suhosin.so
apache2 1399 root mem REG 254,2 31120 227233 /usr/lib/php5/20090626/pdo_mysql.so
apache2 1399 root mem REG 254,2 100776 227216 /usr/lib/php5/20090626/pdo.so
apache2 1399 root mem REG 254,2 135864 227232 /usr/lib/php5/20090626/mysqli.so
正如您在上面看到的,模块安装在一个不知道的文件路径上,或者由公共库路径引导:/usr/lib/php5/20090626/。对于您的安装,它可能不同,但只有pdo_mysql的路径。所以,pdo。所以,mysqli.so。所以,这就是为什么Drupal或其他php引擎找不到这个库,并显示错误:PDOException: could not find driver
我只是不知道为什么它被安装在这么奇怪的路径上,对我来说,这只是debian 6中库包安装脚本中的一个错误。
我通过为/usr/lib/php5/20090626/ to下的所有文件创建一个符号来解决这个问题
/usr/lib/php5/
在s /usr/lib/php5/20090626/* /usr/lib/php5/
我花了最后一天的时间试图弄清楚为什么我会得到以下错误。我运行的是Ubuntu 14.04。
存在的问题:
我注意到我的php - cli版本运行的是php7.0,但php_info() (web版本)显示的是php 5.5.9。尽管php_info()说pdo已启用,但使用命令行(CLI)无法识别pdo_mysql命令。原来我的旧版本启用了mysql,但CLI版本没有启用。我所做的就是为php7.0安装mysql,它就可以工作了。
这是有效的方法:
查看版本信息:
php -v
安装mysql for php7.0
sudo apt-get install php7.0-mysql
1)确保你的CLI版本与你的网页版本相同
2)如果它们是不同的,确保你的CLI版本有mysql插件,因为它没有作为默认提供。
对于那些使用Symfony2/3并想知道为什么会得到这个错误的人。如果您正在使用“mapping_types”,则可能会遇到此错误。原因是“mapping_types”被放在了错误的级别。例如:
doctrine:
dbal:
mapping_types:
set: string
这个“mapping_types”必须放在这个级别:
doctrine:
dbal:
#To counter the error caused by 'mapping_types'
connections:
default:
server_version: %database_server_version%
mapping_types:
set: string
我希望这对你们有帮助
我在这里找到了解决方案:https://github.com/doctrine/DoctrineBundle/issues/327
正在调用不正确的PHP安装
我也遇到过同样的问题。我希望这能帮助到和我有类似问题的人。
场景
OS = Windows 10
Platform = XAMPP
PHP Version = 7 (Multiple Version seem to have been installed in the PC)
我在公用文件夹中创建了phpinfo.php文件,并运行phpinfo()来查找我的php.ini文件的位置。
php.ini Location = c:\xampp\php\php.ini
问题
调用c:\xampp\htdocs> php -v返回php 7.2.3,但phpinfo.php显示php 7.2.2。
解决方案
而不是打电话
php artisan migrate:install
它给了我这个错误,我用了
c:\xampp\php\php artisan migrate:install
这招奏效了。
PHP Fatal error: Uncaught PDOException: could not find driver
我挣扎着,挣扎着“apt安装php-mysql php7toInfinity和不要忘记sqlite- whatever -ever's”,只是无法摆脱这个错误消息,直到我回到基础,重置文件权限在网站上的问题。
这3个命令重置文件和文件夹的权限在网站上,让它再次工作。
cd /var/www/web-site-name.com/web/
# find (sub) directories and change permissions
find . -type d -exec chmod 755 {} \;
# find files and change permissions
find . -type f -exec chmod 664 '{}' \;
对于使用MAMP的人,
如果你有
激活扩展= php_pdo_mysql.dll
设置你的扩展所在的正确路径,(例如:extension_dir = "C:\MAMP\bin\php\php7.4.1\ext\")
...你仍然不能在phpinfo()上看到pdo_mysql扩展,然后确保你从你的web服务器的文档根调用phpinfo(),而不是从其他地方。
如果你一直在其他地方调用它,那么你可能编辑了错误的php.ini文件:
Go to the document root of your web server (the path can be found in Mamp > preferences > Web server)
Create a file named info.php in this folder, open it and paste <?php phpinfo(); ?> then save the file.
Open the info.php you've just created in your browser (typically, http://localhost/info.php)
Now search for "Loaded Configuration File" in the page and look at the path of your php.ini file --> It's probably a different php.ini that the one you've been originally editing.
So open this file and make the edits (uncomment.., etc)
Restart your server
Check info.php again, the extension pdo_mysql should appear.
如果没有,如果你以前像我一样改变了你的服务器的文档根路径,我建议你重新设置为“C:\MAMP\htdocs”,并把你的网站放在这里,因为这真的解决了我的问题。
希望这能帮助到一些人。