问题描述
我在将Largre 7.24.0与Postgresql 12.3结合使用时遇到问题 这是我收到的错误消息:
Illuminate\Database\QueryException
Could not find driver (sql: insert into "posts" ("title","content","updated_at","created_at") values (aze,bcb,2020-08-11 18:02:26,2020-08-11 18:02:26) returning "id")
这是我的设置(我使用DBeaver和命令行测试了设置(主机,端口,用户名,密码和db_name):
.env:
DB_CONNECTION=pgsql
DB_HOST=127.0.0.1
DB_PORT=5432
DB_DATABASE=<db_name>
DB_USERNAME=<user_name>
DB_PASSWORD=<password>
database.PHP:
'default' => env('DB_CONNECTION','pgsql'),...
'connections' => [
'pgsql' => [
'driver' => 'pgsql','url' => env('DATABASE_URL'),'host' => env('DB_HOST','127.0.0.1'),'port' => env('DB_PORT','5432'),'database' => env('DB_DATABASE','<db_name>'),'username' => env('DB_USERNAME','<user_name>'),'password' => env('DB_PASSWORD','<password>'),'charset' => 'utf8','prefix' => '','prefix_indexes' => true,'schema' => 'public','sslmode' => 'prefer',],
这是我尝试过的:
-
composer require doctrine/dbal
- 编辑/etc/PHP/7.4/apache2/PHP.ini并取消注释
extension=pdo_pgsql
和extension=pgsql
-
apt-get install PHP-pgsql && sudo systemctl restart apache2
- 由于字段名称周围的双引号而不是值使我感到困惑,因此我执行了原始SQL查询以确保语法正确(我使用DBeaver对其进行了测试)。
$sqlQuery = "insert into posts
(title,post,updated_at,created_at) values
('aze','bcb','2020-08-11 17:10:47','2020-08-11 17:10:48') returning id";
$result = DB::select(DB::raw($sqlQuery));
- 我先运行
PHP artisan tinker
,然后在命令行上运行DB::connection()->getPdo();
,并得到了以下结果:
=> Doctrine\DBAL\Driver\PDOConnection {#3085
inTransaction: false,attributes: {
CASE: NATURAL,ERRMODE: EXCEPTION,PERSISTENT: false,DRIVER_NAME: "pgsql",SERVER_INFO: "PID: 27281; Client Encoding: UTF8; Is Superuser: off; Session Authorization: mespas; Date Style: ISO,DMY",ORACLE_NULLS: NATURAL,CLIENT_VERSION: "10.12 (Ubuntu 10.12-0ubuntu0.18.04.1)",SERVER_VERSION: "12.3 (Ubuntu 12.3-1.pgdg18.04+1)",STATEMENT_CLASS: [
"Doctrine\DBAL\Driver\PDOStatement",[],EMULATE_PREPARES: false,CONNECTION_STATUS: "Connection OK; waiting to send.",DEFAULT_FETCH_MODE: BOTH,},}
显然我应该得到什么
我不断收到相同的信息,经过几个小时的研究,我有点没主意...
解决方法
好的,所以按照@nibnut的建议,我去掉了Apache的php 7.2并启用了7.4 当我在查看它时,我检查了CLI版本并收到以下消息:
PHP Warning: PHP Startup: Unable to load dynamic library 'pdo_pgsql' (tried: /usr/lib/php/20190902/pdo_pgsql (/usr/lib/php/20190902/pdo_pgsql: cannot open shared object file: No such file or directory),/usr/lib/php/20190902/pdo_pgsql.so (/usr/lib/php/20190902/pdo_pgsql.so: undefined symbol: pdo_parse_params)) in Unknown on line 0
对于那些感兴趣的人,我发现了如何安装它here。
现在可以正常工作,并且我的数据已保存在数据库中,即使很奇怪,我在运行php -v
时仍然收到消息
感谢@nibnut的帮助!