话说php中PDO驱动切换数据库问题
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了话说php中PDO驱动切换数据库问题相关的知识,希望对你有一定的参考价值。
PDO没有提供 select_db 方法?如何切换数据库?
每次切换数据库都 new PDO('mysql:库名=testdb;host=127.0.0.1',... );
这样重新new效率超低啊,
$pdo->select_db(); 木有咋整?
Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)
【中文标题】Laravel:PHP Artisan Migrate 抛出 PDO 异常:找不到驱动程序(Postgres)【英文标题】:Laravel: PHP Artisan Migrate throws PDO Exception: Could not find driver (Postgres) 【发布时间】:2017-08-02 15:11:19 【问题描述】:操作系统: Ubuntu 16.10
服务器: Nginx
数据库: PostgreSQL 9.5.4
Laravel 5.4
尝试执行我的数据库迁移,但php artisan migrate
抛出以下错误:
[照亮\数据库\查询异常] 找不到驱动程序:(SQL select * from information_schema.tables where tables_schema = username and table_name = migrations)
接着是第二条消息说明
[PDO异常]
找不到驱动程序
我做了以下事情:
-
验证我安装了php-pgsql的最新版本
取消注释 /etc/php/7.0/fpm/php.ini 中与 php_pdo_pgsql.dll 相关的行
多次重启 posgtresql 和 nginx
目前,当我运行 php -i
时,我得到的 PDO 部分的输出是
PDO 支持 => 启用
PDO 驱动程序 => pgsql
pdo_pgsql 部分产生
PostgreSQL(libpq) 版本 =>9.5.4
模块版本 =>7.0.15-0ubuntu0.16.10.4
然后 pgsql 部分返回
PostgreSQL(libpq) 版本 = 9.5.4
PostgreSQL(libpq) => x86_64-pc-linux-gnu 上的 PostgreSQL 9.5.4,由 gcc (Ubuntu 6.1.1-11ubuntu12) 6.1.1 编译 20160805,64 位多字节字符 支持 => 启用
SSL 支持 => 启用
活动持久链接 => 0
活动链接 => 0
但尽管如此,仍然得到同样的错误。我认为这可能是权限问题,但以 root 或 www-data 身份运行命令具有相同的结果。
【问题讨论】:
如果你使用的是php-fpm,除了重启web服务器(nginx/apache)之外,你需要重启它 【参考方案1】:你需要定义你的 .env 文件
在 your.env 文件中,您需要指定您使用的数据库(MySQL、SQLite、Postgres)并指定您的数据库用户名和密码
APP_ENV=local
APP_KEY=base64:gqaCpjbEfukDr5As7EnrqRzi5PSho1rOS/q2H0E+HOs=
APP_DEBUG=true
APP_LOG_LEVEL=debug
APP_URL=http://localhost
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=YOUR_DB_NAME
DB_USERNAME=YOUR_USERNAME
DB_PASSWORD=YOUR_PASSWORD
BROADCAST_DRIVER=log
CACHE_DRIVER=file
SESSION_DRIVER=file
QUEUE_DRIVER=sync
REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379
MAIL_DRIVER=smtp
MAIL_HOST=mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=
MAIL_PASSWORD=
MAIL_ENCRYPTION=null
PUSHER_APP_ID=
PUSHER_APP_KEY=
PUSHER_APP_SECRET=
在使用迁移时运行这些命令总是好的
composer dump-autoload
php artisan cache:clear
php artisan view:clear
【讨论】:
如果你需要我可以帮助你通过teamviewer,你可能犯了一些小错误,但如果你看不到,总是很难分辨出什么问题【参考方案2】:已解决:
确保在这种情况下您已经运行
php artisan cache:clear
php artisan config:cache
我以为我在每个关键步骤都这样做了,但是再次运行这两个命令使我能够进行迁移并使网站正常运行。不过,感谢 lewis4u 的帮助。
【讨论】:
【参考方案3】:我也遇到过同样的情况, 按顺序尝试以下,
1) install the postgre extensions for php, those are:
php-(YOUR_VERSION)-pgsql, and php-pgsql.
2) enable pgsql extensions in your php.ini file, basically,
uncomment the the extensions.
3) restart the apache server(or nginx).
4) check that extensions are enable using phpinfo() or any else tool.
5) set a password for (in instance) the postgres user in postgreSQL
server, this is a very important step.
登录 psql shell:
sudo su - postgres
\password postgres
输入密码并确认。
现在,设置您的 .env 文件并重试。
【讨论】:
【参考方案4】:你应该安装 PHP pdo
sudo apt upgrade
sudo apt install php-pgsql
【讨论】:
以上是关于话说php中PDO驱动切换数据库问题的主要内容,如果未能解决你的问题,请参考以下文章