【问题标题】:Issue in connecting Postgresql database through laravel通过 laravel 连接 Postgresql 数据库的问题
【发布时间】:2017-03-19 21:20:13
【问题描述】:

我很难用 pgsql 设置 laravel 5.3(在 wamp/windows 上运行)。当我尝试使用“php artisan migrate”迁移表时,出现错误“PDO 异常 - 找不到驱动程序”

  1. 我安装了 postgres 9.6。
  2. 我为 postgresql 启用了 php 扩展:

3.我在环境路径变量中添加了postgres库

  1. 我用 php 测试了 pdo postgres 连接,我正在连接:
$dbh = new PDO("pgsql:dbname=rotocms;host=127.0.0.1", "postgres", "mypassword"); if($dbh){ echo "connected"; }else{ echo 'there has been an error connecting'; }

所以我被卡住了,无法在 laravel 中进行迁移。我的 .env:

DB_CONNECTION=pgsql DB_HOST=127.0.0.1 DB_PORT=5432 DB_DATABASE=我的数据库名 DB_USERNAME=postgres DB_PASSWORD=密码

这是 laravel 错误堆栈:

    local.ERROR: PDOException: could not find driver in C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php:119
Stack trace:
#0 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php(119): PDO->__construct('pgsql:host=127....', 'postgres', 'password', Array)
#1 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\Connector.php(56): Illuminate\Database\Connectors\Connector->createPdoConnection('pgsql:host=127....', 'postgres', 'password', Array)
#2 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\PostgresConnector.php(36): Illuminate\Database\Connectors\Connector->createConnection('pgsql:host=127....', Array, Array)
#3 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connectors\ConnectionFactory.php(100): Illuminate\Database\Connectors\PostgresConnector->connect(Array)
#4 [internal function]: Illuminate\Database\Connectors\ConnectionFactory->Illuminate\Database\Connectors\{closure}()
#5 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connection.php(964): call_user_func(Object(Closure))
#6 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connection.php(832): Illuminate\Database\Connection->getPdo()
#7 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connection.php(717): Illuminate\Database\Connection->reconnectIfMissingConnection()
#8 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Connection.php(350): Illuminate\Database\Connection->run('select * from i...', Array, Object(Closure))
#9 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Schema\PostgresBuilder.php(25): Illuminate\Database\Connection->select('select * from i...', Array)
#10 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Migrations\DatabaseMigrationRepository.php(156): Illuminate\Database\Schema\PostgresBuilder->hasTable('migrations')
#11 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Migrations\Migrator.php(515): Illuminate\Database\Migrations\DatabaseMigrationRepository->repositoryExists()
#12 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Console\Migrations\MigrateCommand.php(92): Illuminate\Database\Migrations\Migrator->repositoryExists()
#13 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Database\Console\Migrations\MigrateCommand.php(58): Illuminate\Database\Console\Migrations\MigrateCommand->prepareDatabase()
#14 [internal function]: Illuminate\Database\Console\Migrations\MigrateCommand->fire()
#15 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Container\Container.php(508): call_user_func_array(Array, Array)
#16 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Console\Command.php(169): Illuminate\Container\Container->call(Array)
#17 C:\wamp64\www\myproject\vendor\symfony\console\Command\Command.php(256): Illuminate\Console\Command->execute(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#18 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Console\Command.php(155): Symfony\Component\Console\Command\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#19 C:\wamp64\www\myproject\vendor\symfony\console\Application.php(820): Illuminate\Console\Command->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#20 C:\wamp64\www\myproject\vendor\symfony\console\Application.php(187): Symfony\Component\Console\Application->doRunCommand(Object(Illuminate\Database\Console\Migrations\MigrateCommand), Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#21 C:\wamp64\www\myproject\vendor\symfony\console\Application.php(118): Symfony\Component\Console\Application->doRun(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#22 C:\wamp64\www\myproject\vendor\laravel\framework\src\Illuminate\Foundation\Console\Kernel.php(121): Symfony\Component\Console\Application->run(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#23 C:\wamp64\www\myproject\artisan(35): Illuminate\Foundation\Console\Kernel->handle(Object(Symfony\Component\Console\Input\ArgvInput), Object(Symfony\Component\Console\Output\ConsoleOutput))
#24 {main}  

phpinfo() 中的 PostgreSQL (libpq) 版本也是 9.4.4,尽管我安装了 PostgreSQL 9.6,但不确定是否可以..

【问题讨论】:

  • 确保你在主 php.ini 文件中取消注释告诉 php Postgres 驱动程序在哪里(通常是 extension=pgsql.so)的行,看看这个 - stackoverflow.com/questions/10085039/…
  • 我在 Windows 上,我发布了我的 phpinfo postgresql 部分。我的 php.ini 中的行未注释: extension=php_pdo_pgsql.dll extension=php_pgsql.dll
  • database name user password.envdatabase.php 文件中都有写吗
  • 是的,我试过了,重新启动了一切,但仍然无法正常工作。仍然是同样的错误。 :(

标签: php postgresql laravel pdo wamp


【解决方案1】:

config\database.php下是文件名database.php

这里选择默认为pgsql这样

'default' => env('DB_CONNECTION', 'pgsql')

在此处使用您的所有详细信息进行修改

'pgsql' => [
            'driver' => 'pgsql',
            'host' => env('DB_HOST', 'localhost'),
            'port' => env('DB_PORT', '5432'),
            'database' => env('DB_DATABASE', 'forge'),
            'username' => env('DB_USERNAME', 'forge'),
            'password' => env('DB_PASSWORD', ''),
            'charset' => 'utf8',
            'prefix' => '',
            'schema' => 'public',
            'sslmode' => 'prefer',
        ]

重启你的服务器,希望它能连接

【讨论】:

  • 是的,我已经设置好了,'default' => env('DB_CONNECTION', 'pgsql')。即使在 .env 文件中定义 pgsql 就足够了。 DB_CONNECTION=pgsql
【解决方案2】:

你必须寻找一些东西,

确保在app/config/database.php中配置“默认”键

对于postgres,这将是'default' => 'pgsql'

检查您是否安装了正确的 PHP 扩展。您需要安装并启用 pdo_pgsql.sopgsql.so。有关如何执行此操作的说明因操作系统而异。

取消注释 php.ini 中的 extension=pdo_pgsql.soextension=pgsql.so

现在将libpq.dllC:\wamp\bin\php\php5.*\复制到C:\wamp\bin\apache*\bin并重新启动所有服务。

如果问题仍然存在,请查看您的 Environment Variables

让我知道结果。

【讨论】:

  • 我已经这样做了。并且已经阅读了这些答案。所以我在我的问题中描述了。我将 postgresql 路径添加到我的路径变量中。并贴了一张它的照片。我还配置了我的问题中看到的 laravel .env。 'default' => 'postgres' 对于 5.3 是错误的,它是 'default' => 'pgsql'
  • @AdnanMujkanovic 请卸载 wamp 服务器,然后重新安装。我也推荐xamp,很棒。
  • 运行php artisan config:cache @AdnanMujkanovic
【解决方案3】:

您还必须在本地安装 postgres 驱动程序。在 macOS 上,您可以使用 brew。

根据您的 PHP 版本(在终端中尝试 php -v),使用以下命令:

brew install php71-pdo-pgsql
brew install php70-pdo-pgsql
brew install php55-pdo-pgsql

另外,如果您要代客代客,请确保事后联系valet restart

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-20
    • 2021-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-08
    相关资源
    最近更新 更多