【问题标题】:PDOException: could not find driver when using phpunitPDOException:使用 phpunit 时找不到驱动程序
【发布时间】:2014-06-08 08:59:48
【问题描述】:

我开始使用 laravel 4 并且我正在尝试开始使用单元测试,以便让我的生活更轻松。好吧,你们都会猜到我的开发在尝试了 phpunit 测试之后并没有变得更容易。简单的测试很好,很容易,但是当事情开始变得更复杂时,它们并没有像我想象的那样进行。

问题是我进行了简单的测试,但我得到了一些奇怪的错误PDOException: could not find driver。我已经阅读了几篇关于这个主题的文章和帖子,但没有解决我的问题。我已经安装了php5-mysql,当我打电话给php -m 时,它说我同时拥有PDO 和pdo_mysql。我使用的实际命令是php -m |grep -i "pdo",输出是:

PDO
pdo_mysql

好吧,我已经尝试在浏览器中实际测试 PDOException 类。为此,我将 mysql 用户密码更改为不正确的密码,并测试了 artisan server 中会发生什么(使用命令 php artisan serve ---> http://localhost:8000/ 调用)。在浏览器中,一切都很有魅力,但是当我尝试在 console 中调用 ``phpunit` 时,结果就不一样了。

我试图查看 webserver 和 cli 是否有不同的配置文件,但结果是文件是相同的。我比较过的配置文件是:

用于网络服务器

/etc/php5/apache2/conf.d/20-pdo_mysql.ini
/etc/php5/apache2/conf.d/05-opcache.ini
/etc/php5/apache2/conf.d/20-json.ini
/etc/php5/apache2/conf.d/20-mysql.ini
/etc/php5/apache2/conf.d/20-mysqli.ini
/etc/php5/apache2/conf.d/10-pdo.ini
/etc/php5/apache2/conf.d/20-mcrypt.ini
/etc/php5/apache2/conf.d/20-curl.ini
/etc/php5/apache2/php.ini

用于命令行

/etc/php5/cli/conf.d/20-pdo_mysql.ini
/etc/php5/cli/conf.d/05-opcache.ini
/etc/php5/cli/conf.d/20-json.ini
/etc/php5/cli/conf.d/20-mysql.ini
/etc/php5/cli/conf.d/20-mysqli.ini
/etc/php5/cli/conf.d/10-pdo.ini
/etc/php5/cli/conf.d/20-mcrypt.ini
/etc/php5/cli/conf.d/20-curl.ini
/etc/php5/cli/php.ini

为了比较它们,我使用 diff 命令,像这样diff -s /path/to/file1 /path/to/file2

错误如下所示:

1) ExampleTest::testBasicExample
PDOException: could not find driver

/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/Connector.php:47
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php:22
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:59
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/ConnectionFactory.php:47
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:127
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/DatabaseManager.php:63
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:167
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/DatabaseMigrationRepository.php:135
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Migrations/Migrator.php:366
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:93
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Console/Migrations/MigrateCommand.php:56
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Command.php:108
/var/www/smlsspd/vendor/symfony/console/Symfony/Component/Console/Command/Command.php:241
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Command.php:96
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Console/Application.php:96
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Foundation/Artisan.php:57
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:208
/var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Support/Facades/Facade.php:208
/var/www/smlsspd/app/tests/TestCase.php:70
/var/www/smlsspd/app/tests/TestCase.php:70
/var/www/smlsspd/app/tests/TestCase.php:46
phar:///var/www/smlsspd/phpunit.phar/phpunit/TextUI/Command.php:179
phar:///var/www/smlsspd/phpunit.phar/phpunit/TextUI/Command.php:132

你能给我一个提示或解决这个问题吗?

感谢您的宝贵时间:)

【问题讨论】:

    标签: php mysql laravel pdo phpunit


    【解决方案1】:

    似乎 Laravel 使用 SQLite 作为数据库进行测试。请参阅第 2 行的回溯:

    /var/www/smlsspd/vendor/laravel/framework/src/Illuminate/Database/Connectors/SQLiteConnector.php:22
    

    但这似乎没有安装在您的系统上。所以我认为你需要安装 SQLite 驱动。

    【讨论】:

    • 好吧,这似乎是个问题,因为我真的没有安装 SQLite PDO 驱动程序。稍后我会测试一下。
    • 我终于回到家并进行了测试。似乎我没有阅读所有错误消息。感谢您的帮助。
    【解决方案2】:

    如果您使用 sqlite 进行测试,您将需要 php sqlite 驱动程序

    适用于 Ubuntu 14.04

    sudo apt-get install php5-sqlite
    sudo service apache2 restart
    

    在 ubuntu 16.04 中没有php5-sqlite

    sudo apt-get install php7.0-sqlite
    sudo service apache2 restart
    

    【讨论】:

    • 我有 php 7.1 应该期待什么?
    【解决方案3】:

    如果你使用的是 SqlLite,你必须输入 php.init 并取消注释这一行。

    ;extension = pdo_sqlite
    

    【讨论】:

    • 我做了但仍然显示“$ php artisan migrate --env=testing PHP 警告:PHP 启动:无法加载动态库 '/usr/lib/php/20160303/php_pdo_sqlite.dll' - / usr/lib/php/20160303/php_pdo_sqlite.dll:无法打开共享对象文件:在第 0 行的未知中没有这样的文件或目录”。我的操作系统是 Ubuntu 14.04 LTS
    • 除了取消注释 php.unit 中的这一行 extension = pdo_sqlite 在你的 phpunit.xml 文件中,你必须有这两行
    【解决方案4】:

    在 Windows 上,我必须在 php.ini 中激活 extension=php_pdo_sqlite.dll

    【讨论】:

      【解决方案5】:

      对于那些使用Laravel Homestead 的用户,请确保您在 Homestead 中而不是在本地计算机上运行phpunit!你可以SSH into itvagrant ssh

      正如其他人所提到的,它需要 SQLite,因此在您的虚拟机中运行它可确保您的测试可用。

      【讨论】:

        【解决方案6】:

        php7.0-sqlite 不再工作使用 php7.1-sqlite

        sudo apt-get install php7.1-sqlite3
        sudo service apache2 restart
        

        【讨论】:

        • 我运行了 sudo apt-get update 然后 sudo apt-get install php7.1-sqlite 但得到了这些错误:E: Unable to locate package php7.1-sqlite E: Couldn't find any package by glob 'php7.1-sqlite' E: Couldn't find any package by regex 'php7.1-sqlite'
        • 试试 sudo apt-get install php7.1-sqlite3
        • 那个鬼鬼祟祟的3 我错过了,无论如何我做了apt-cache search php7.1-sqlite3 并没有得到搜索结果,同样php7.1-sqlite 只有php7.0-sqlite 返回php7.0-sqlite3 - SQLite3 module for PHP,我可能错过了必填项ppa(我在 Windows 上使用 Ubuntu 子系统)
        【解决方案7】:

        首先,安装 SQLite for PHP sudo apt-get install php-sqlite3

        然后检查您的 php.ini 并确保未注释以下行

        ;extension = pdo_sqlite
        

        如果你使用的是 apache

        sudo service apache2 restart

        或者如果你使用的是 Nginx

        sudo service nginx restart


        注意:如果您不知道您的 php.ini 路径在哪里,请使用 php -i |grep php.ini 命令

        【讨论】:

          【解决方案8】:

          在 Laravel 的 phpunit.xml 文件中,只需设置 "DB_CONNECTION""DB_DATABASE" 值。由于我使用的是 mysql(不是 sqlite),因此我将它们更改为:

          <server name="DB_CONNECTION" value="mysql"/>
          <server name="DB_DATABASE" value="db_name"/>
          

          【讨论】:

            猜你喜欢
            • 2016-09-03
            • 2022-01-23
            • 2017-06-07
            相关资源
            最近更新 更多