我刚刚安装了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://。我本希望看到一个不同的错误消息,也许类似于“DSN字符串没有指定驱动程序/协议”。

将mysql://添加到DSN字符串的开头就解决了这个问题。

其他回答

我在使用单独的php.ini运行测试时遇到了同样的问题。我必须将这些行添加到我自己的php.ini文件中:

[PHP]
extension = mysqlnd.so
extension = pdo.so
extension = pdo_mysql.so

注意:正是这个顺序

Linux Mint

我在使用PhpBrew(5.5.9 / 7.0.14)并试图创建PDO连接时遇到了同样的问题。

在我尝试了这篇文章中的大部分解决方案后,我做了以下事情:

关闭PhpBrew 执行sudo apt-get install php7.0 (Linux Mint 17.2 / PHP7.0.16) -安装新的php版本

对于那些使用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

在我的情况下,我的DSN字符串是不正确的,特别是它不包含mysql://。我本希望看到一个不同的错误消息,也许类似于“DSN字符串没有指定驱动程序/协议”。

将mysql://添加到DSN字符串的开头就解决了这个问题。

如果你读了上面所有的答案,它仍然不工作…

确保PHP PDO连接字符串正常。不像我的:

$dbh = new PDO(' ' mysql:host='。DB_HOST。”;dbname = '。Db_name, db_user, db_pass)

错误消息中没有没有找到驱动程序的信息。

在重新安装所有可能的PDO和MySQL库后,我发现有“at start of my connection string”。