PHP-从本地主机(在Windows上)连接到heroku PostGres数据库
我正在尝试使用heroku上托管的PostGres数据库,我需要从本地机器连接到它。以下是我正在使用的凭证示例:PHP-从本地主机(在Windows上)连接到heroku PostGres数据库,php,postgresql,heroku,dbal,Php,Postgresql,Heroku,Dbal,我正在尝试使用heroku上托管的PostGres数据库,我需要从本地机器连接到它。以下是我正在使用的凭证示例: params: driver: pdo_pgsql host: e5-31-281-414-28.compute-1.amazonaws.com dbname: b6m44bwjmaa41n user: sgjwiakskki password: e4ks28ajgs87 port: 5432 ^^我更改了那些凭证,但那是它们的格式 当我尝试使用pg_con
params:
driver: pdo_pgsql
host: e5-31-281-414-28.compute-1.amazonaws.com
dbname: b6m44bwjmaa41n
user: sgjwiakskki
password: e4ks28ajgs87
port: 5432
^^我更改了那些凭证,但那是它们的格式
当我尝试使用pg_connect
连接时,如下所示:
$dbconn = pg_connect("e5-31-281-414-28.compute-1.amazonaws.com port=5432 dbname=b6m44bwjmaa41n user=sgjwiakskki password=e4ks28ajgs87") or die('Could not connect: ' . pg_last_error());
$dbconn = pg_connect("host=ec2-**-***-***-45.compute-1.amazonaws.com port=5432 dbname=e4ngs3d4risaw9 user=s52mt674s3sjd password=p31mgss562sts7e3kebie3j sslmode=require")
我得到这个错误:
pg_connect(): Unable to connect to PostgreSQL server: could not translate host name "***.compute-1.amazonaws.com" to address: Unknown host
PDOException' with message 'SQLSTATE[08006] [7] FATAL: password authentication failed for user "SYSTEM"' in C:\wamp64\www\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractPostgreSQLDriver.php on line 85
当我尝试使用Doctrines DBAL软件包连接时,我得到了相同的错误:
Uncaught exception 'PDOException' with message 'SQLSTATE[08006] [7] could not translate host name "e5-31-281-414-28.compute-1.amazonaws.com" to address: Unknown host' in C:\wamp64\www\project\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractPostgreSQLDriver.php on line 85
我阅读了所有关于从外部连接到heroku的教程,但我不明白这一点。我可以使用heroku工具带通过命令行进行连接。我可以连接到pgAdmin 3。但似乎无法与这样的web应用程序连接 如手册所述,您应该尝试以下内容 说明
资源pg_connect(字符串$connection_字符串[,int $connect\U type]) 连接字符串可以为空以使用所有默认参数,或者 它可以包含一个或多个由空格分隔的参数设置。 每个参数设置的格式为keyword=value。周围的空间 等号是可选的。写入空值或值 包含空格,用单引号括起来,例如关键字='a “价值”。值中的单引号和反斜杠必须转义 带有反斜杠,即\'和\ 更新: 我没有php。所以,我刚刚安装了来自旧ubuntu存储库的php5.6和php5.6-pqsql包(我使用的是LinuxMint18.132bit) 鉴于上述情况
$ php -v
PHP 5.6.29-1+deb.sury.org~xenial+1 (cli)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
$ php -a
Interactive mode enabled
php > $dbconn = pg_connect("host=ec2-54-217-212-8.eu-west-1.compute.amazonaws.com port=5432 dbname=d464heusrdn2k5 user=mgtvhefjhzilai password=fd6aa97d31b25c26a41a8211008f1838abd76d7715dcac7c742bfc55f37bd50f");
php > $sql = "create table lorem (id int not null, foo varchar(15), primary key (id));";
php > $r = pg_query($dbconn, $sql);
php > $tbls = "select * from information_schema.tables";
php > $qr = pg_query($dbconn, $tbls);
php > while($r = pg_fetch_array($qr)) {
php { print_r($r);
php { }
Array
(
[0] => d464heusrdn2k5
[table_catalog] => d464heusrdn2k5
[1] => public
[table_schema] => public
[2] => lorem
[table_name] => lorem
[3] => BASE TABLE
[table_type] => BASE TABLE
[4] =>
[self_referencing_column_name] =>
[5] =>
[reference_generation] =>
[6] =>
[user_defined_type_catalog] =>
[7] =>
[user_defined_type_schema] =>
[8] =>
[user_defined_type_name] =>
[9] => YES
[is_insertable_into] => YES
[10] => NO
[is_typed] => NO
[11] =>
[commit_action] =>
)
Array
谢谢marmeladze!通过对你的方式这样做,并向我展示它对你有效,我可以看出问题很可能是我使用了错误的凭证。结果有两个问题,第一个是错误的凭证。第二个是我需要将
sslmode=require
放入$connection\u字符串中。
所以字符串变成了这样:
$dbconn = pg_connect("e5-31-281-414-28.compute-1.amazonaws.com port=5432 dbname=b6m44bwjmaa41n user=sgjwiakskki password=e4ks28ajgs87") or die('Could not connect: ' . pg_last_error());
$dbconn = pg_connect("host=ec2-**-***-***-45.compute-1.amazonaws.com port=5432 dbname=e4ngs3d4risaw9 user=s52mt674s3sjd password=p31mgss562sts7e3kebie3j sslmode=require")
在我“尝试”修复凭据后(注意,密码的格式不同,我为其分配了错误的变量),错误消息“无法解析主机”
错误消失,并被两个新错误取代。第一个oen是:
Unable to connect to PostgreSQL server: FATAL: password authentication failed for user
第二个我忘了保存,但它说提供的用户名没有出现在所提供主机的pg_hba.conf
文件中(它为主机提供了IP)。我试图编辑pg_hba.conf文件,但后来发现了一篇关于常见错误消息及其含义的文章:
这意味着您正在尝试在没有SSL的情况下进行连接
致命:主机“…”、用户“u…”、数据库“d…”没有pg_hba.conf条目,
SSL关闭
您正在尝试建立没有SSL的数据库连接。SSL
所有连接都需要。有关详细信息,请参阅文档
关于如何建立加密连接的postgres驱动程序
因此,添加sslmode=require
修复了该问题。然后,身份验证问题之一显然是密码问题,我再次检查,密码中缺少一个字母。修复后解决了所有问题,现在我可以连接了。再次感谢
更新:只想添加我遇到的另一个错误及其原因。我尝试与DBAL连接,但出现了以下错误:
pg_connect(): Unable to connect to PostgreSQL server: could not translate host name "***.compute-1.amazonaws.com" to address: Unknown host
PDOException' with message 'SQLSTATE[08006] [7] FATAL: password authentication failed for user "SYSTEM"' in C:\wamp64\www\myproject\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\AbstractPostgreSQLDriver.php on line 85
它试图与系统
用户连接。问题是我的YAML文件,它有用户名:hs62ksi62sj2
,而它应该是用户:hs62ksi62sj2
因此,工作YAML文件是:
params:
driver: pdo_pgsql
host: ec2-**-***-***-45.compute-1.amazonaws.com
dbname: e4ngs3d4risaw9
user: s52mt674s3sjd
password: p11mgss562sts7e3kebiesf
port: 5432
sslmode: require
我尝试用wrotes包装并添加空格,但没有改变任何东西。我在帖子中提到我也尝试使用DBAL,所以我使用
pg_connect
的方式没有问题。DBAL从我发布的YAML文件中获取参数。让我创建并检查一个