Php 例外情况';PDO异常';带有消息';找不到驱动程序';SQLSRV Laravel Artisan CLI

Php 例外情况';PDO异常';带有消息';找不到驱动程序';SQLSRV Laravel Artisan CLI,php,sql-server,laravel,command-line-interface,Php,Sql Server,Laravel,Command Line Interface,我正在Windows Server 2008上运行PHP5.5。我正在为应用程序使用Laravel4.0框架。我通过PDO连接到一个SQL SRV数据库,当通过http执行时,没有问题,连接被建立,数据被调用和更新没有问题 但是,从Artisan(Laravel的CLI工具)调用命令时,我在日志中看到以下错误: log.ERROR: exception 'PDOException' with message 'could not find driver' in C:\inetpub\MBSWeb

我正在Windows Server 2008上运行PHP5.5。我正在为应用程序使用Laravel4.0框架。我通过PDO连接到一个SQL SRV数据库,当通过http执行时,没有问题,连接被建立,数据被调用和更新没有问题

但是,从Artisan(Laravel的CLI工具)调用命令时,我在日志中看到以下错误:

log.ERROR: exception 'PDOException' with message 'could not find driver' in C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:47
Stack trace:
#0 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php(47): PDO->__construct('sqlsrv:Server=H...', 'xxxxxx', 'xxxxxx', Array)
#1 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\Connectors\SqlServerConnector.php(29): Illuminate\Database\Connectors\Connector->createConnection('sqlsrv:Server=H...', Array, Array)
#2 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php(41): Illuminate\Database\Connectors\SqlServerConnector->connect(Array)
#3 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php(128): Illuminate\Database\Connectors\ConnectionFactory->make(Array, 'sqlsrv')
#4 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php(64): Illuminate\Database\DatabaseManager->makeConnection('sqlsrv')
#5 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Database\DatabaseManager.php(242): Illuminate\Database\DatabaseManager->connection()
#6 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(206): Illuminate\Database\DatabaseManager->__call('table', Array)
#7 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Support\Facades\Facade.php(206): Illuminate\Database\DatabaseManager->table('bb_job_details')
#8 C:\inetpub\MBSWeb\postsrch\app\models\Job.php(214): Illuminate\Support\Facades\Facade::__callStatic('table', Array)
#9 C:\inetpub\MBSWeb\postsrch\app\models\Job.php(214): Illuminate\Support\Facades\DB::table('bb_job_details')
#10 C:\inetpub\MBSWeb\postsrch\app\models\Cron.php(18): Job::getJobDetailsByStatus()
#11 C:\inetpub\MBSWeb\postsrch\app\controllers\ApplicantController.php(14): Cron::ChangePostingJobStatus()
#12 C:\inetpub\MBSWeb\postsrch\app\commands\GetApplicantsCommand.php(45): ApplicantController->index()
#13 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Console\Command.php(108): GetApplicantsCommand->fire()
#14 C:\inetpub\MBSWeb\postsrch\vendor\symfony\console\Symfony\Component\Console\Command\Command.php(244): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#15 C:\inetpub\MBSWeb\postsrch\vendor\laravel\framework\src\Illuminate\Console\Command.php(96): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#16 C:\inetpub\MBSWeb\postsrch\vendor\symfony\console\Symfony\Component\Console\Application.php(897): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#17 C:\inetpub\MBSWeb\postsrch\vendor\symfony\console\Symfony\Component\Console\Application.php(191): Symfony\Component\Console\Application->doRunCommand(Object(GetApplicantsCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 C:\inetpub\MBSWeb\postsrch\vendor\symfony\console\Symfony\Component\Console\Application.php(121): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 C:\inetpub\MBSWeb\postsrch\artisan(59): Symfony\Component\Console\Application->run()
#20 {main} [] []
[2014-03-23 22:53:13] log.ERROR: exception 'Symfony\Component\Debug\Exception\FatalErrorException' with message 'Call to undefined function Symfony\Component\Console\mb_detect_encoding()' in C:\inetpub\MBSWeb\postsrch\vendor\symfony\console\Symfony\Component\Console\Application.php:721
Stack trace:
#0 [internal function]: Illuminate\Exception\Handler->handleShutdown()
#1 {main} [] []
安装了PDO SQLSRV库,请参见下面的phpinfo()屏幕截图,正如我已经说过的,当通过http使用应用程序时,我可以毫无问题地连接


为什么PDO连接可以通过http正常工作,但不能在CLI中工作请注意我使用的是完全相同的代码集,一个是从Laravel控制器调用的,另一个是从Laravel命令调用的。

php cli和php cgi使用不同的php.ini文件。请尝试
php-i | grep pdo
查看是否为您的cli安装了pdo,请参阅
php-i | grep“加载的配置文件”

以上答案是正确的,但只是为了澄清:

  • 打开控制台并执行:

    php-i | grep“加载的配置文件”

  • 这将为您提供php-cli.ini所在的文件夹目录(Laravel命令使用的php.ini与HTTP请求使用的php.ini不同)

  • 转到该文件,并确保其中包含以下内容:

    extension=php_pdo_mysql.dll

  • 重新启动服务器,然后重试。这对我有用,希望对我有帮助


  • 谢谢,你给我指明了正确的方向。我不得不使用Windows命令php-I | find/I“配置文件”。原来CLI使用的是另一个版本的php。我更改了PATH变量,现在一切正常。也可以使用
    php--ini
    (跨平台工作)获取CLI
    .ini
    文件位置。有没有办法通过终端在运行MAMP的mac上安装mssql?@MichelAyres您应该创建一个顶级问题,而不是在评论中询问。这就是让SO工作得最好的原因。再澄清一点,重新启动服务器也意味着重新启动php fpm,如果您使用的是php fpm的话。