Php PDO异常“;找不到驱动程序”;
我刚刚用Apache、MySQL和PHP安装了Debian Lenny,我收到一个PDO异常Php PDO异常“;找不到驱动程序”;,php,mysql,pdo,lamp,Php,Mysql,Pdo,Lamp,我刚刚用Apache、MySQL和PHP安装了Debian Lenny,我收到一个PDO异常找不到驱动程序 这是它所指的特定代码行: $dbh=new-PDO('mysql:host='.DB\u-host';dbname='.DB\u-NAME,DB\u-USER,DB\u-PASS) DB\u HOST、DB\u NAME、DB\u USER和DB\u PASS是我定义的常量。它在生产服务器(以及我以前的Ubuntu服务器设置)上运行良好 这与我的PHP安装有关吗 搜索互联网没有帮助,我得到
找不到驱动程序
这是它所指的特定代码行:
$dbh=new-PDO('mysql:host='.DB\u-host';dbname='.DB\u-NAME,DB\u-USER,DB\u-PASS)
DB\u HOST
、DB\u NAME
、DB\u USER
和DB\u PASS
是我定义的常量。它在生产服务器(以及我以前的Ubuntu服务器设置)上运行良好
这与我的PHP安装有关吗
搜索互联网没有帮助,我得到的只是专家交流和示例,但没有解决方案。如果MySQL和驱动程序安装正确,您是否检查了php.ini(使用phpinfo()检查正确的位置?您需要一个名为pdo_MySQL的模块。正在phpinfo()中查找以下内容
更新:较新版本应使用php-sqlite3
包,而不是php5-sqlite
。因此,如果您使用的是最新的ubuntu版本,请使用:
sudo apt-get install sqlite php-sqlite3
问题的原始答案如下:
sudo apt-get install sqlite php5-sqlite
sudo /etc/init.d/apache2 restart
如果您的phpinfo()没有显示pdo_sqlite行(在我的情况下,在我的Ubuntu服务器上),您只需要运行上面的行,然后就可以开始了。代码中的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重启
- Nginx:
sudo/etc/init.d/Nginx重启
在我的情况下,我的DSN字符串不正确,特别是它不包含mysql://。
我本来希望看到不同的错误消息,可能类似于“DSN字符串未指定驱动程序/协议”
将mysql://
添加到DSN字符串的开头解决了问题。检查php配置文件中的扩展名\u dir设置是否正确。尝试注释/取消注释一些扩展,看看它是否反映在phpinfo()上。
如果没有,则无法加载php配置文件(错误位置)扩展名\u dir被注释或设置为错误位置 我在Debian 6上解决了这个问题。
通常我只是安装了php5通用
软件包。安装后,您必须重新启动web服务器(apache或nginx,具体取决于您安装的服务器)。
然后我对apache进程id(lsof-p进程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.so、pdo.so、mysqli.so的路径。因此,这就是为什么Drupal或任何其他php引擎找不到该库,并显示错误:PDOException:not find driver
我只是不知道为什么它被安装在如此奇怪的路径上,对我来说,它只是Debian6中库包安装脚本中的一个bug。
我通过为/usr/lib/php5/20090626/
下的所有文件创建一个符号来解决这个问题
/usr/lib/php5/
使用此命令:
ln-s/usr/lib/php5/20090626/*/usr/lib/php5/
在Ubuntu上执行
sudo apt-get install php5-mysql
$DB_TYPE='mysql'//数据库类型
$DB_HOST='localhost'//主机名
$DB_USER='root'//主机用户名
$DB_PASS=''//主机密码
$DB_NAME='database_NAME'//数据库名称
$dbh=new-PDO($DB\u-TYPE:host=$DB\u-host;dbname=$DB\u-NAME;“,$DB\u-USER,$DB\u-PASS);//PDO连接
这对我很有用。在我的Windows机器上,我必须在php.ini中给出扩展目录的绝对路径:
extension\u dir=“c:\php5\ext”
对于CentOS上的php5.5
,我通过安装php55 mysqlnd
包修复了这个问题
sudo yum -y install php55w-mysqlnd # For Webtatic
sudo yum -y install php55u-mysqlnd # For Remi
要获得安装帮助,请编写注释,因为这取决于系统上安装PHP的方式。可用的repo是webstatic
和remi
当将它们添加到php.ini中时,请确保php_pdo.dll引用在db drivers dll之前,否则也会导致此错误消息。按如下方式添加它们:
[PHP_PDO]
extension=php_pdo.dll
[PHP_PDO_MYSQL]
extension=php_pdo_mysql.dll
cd /www/homestead/my_project
php artisan migrate
问题是缺少php到mysql库。在CentOs,我通过运行来修复它
#yum安装php-mysql
,然后使用#/bin/systemctl restart-httpd.service重新启动apache
注意,命名与基于debian/ubuntu的发行版、php->php5和httpd->apache2稍有不同。在删除php5包(包括所有驱动程序)后,我遇到了同样的问题为了安装php7软件包。实际上,我安装的php7包没有mysql模块
我通过在终端中键入以下内容来解决此问题:
1) $apt缓存搜索php7
列出了所有的模块,查看我找到的模块
php7.0-mysql-用于PHP的mysql模块
2) $sudo apt get安装php7.0-mysql
apt-get install php-mysql
apt-get install php7.0-mysql
就这样。它在我的linux系统中对我有效
(使用适当的php版本,您的可能是php5)
在ubuntu和PHP7上运行良好,还有一件事需要确认,因为有些人正在从互联网上复制/粘贴示例代码以开始使用。确保您已在此处输入MySQL:
... $dbh = new PDO ("mysql: ...
在一些例子中,这表明
$dbh = new PDO ("dblib ...
在使用单独的php.ini运行测试时,我遇到了同样的问题。我必须将这些行添加到我自己的php.ini文件中:
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
注意:正是在这里
[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so
sudo apt-get install php-mysql
sudo service apache2 restart
sudo apt-get install php5-mysqlnd
php -v
sudo apt-get install php7.0-mysql
doctrine:
dbal:
mapping_types:
set: string
doctrine:
dbal:
#To counter the error caused by 'mapping_types'
connections:
default:
server_version: %database_server_version%
mapping_types:
set: string
apt-get install php-mysql
apt-get install php7.0-mysql
uncomment the line : extension=php_pdo_mysql.dll
service apache2 restart
OS = Windows 10
Platform = XAMPP
PHP Version = 7 (Multiple Version seem to have been installed in the PC)
php artisan migrate:install
c:\xampp\php\php artisan migrate:install
cd /www/homestead/my_project
php artisan migrate
cd ~/homestead
vagrant ssh
cd /www/homestead/my_project
php artisan migrate
PHP Fatal error: Uncaught PDOException: could not find driver
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 '{}' \;