PHP pg_connect连接字符串

时间:2014-12-14 15:06:15

标签: php postgresql

我正在尝试设置一个正确的连接字符串,以便从php 5.4连接到PG 9.2。一块蛋糕,除非用户名包含空格...也许有人可以帮助我正确引用我的报价。

我的尝试:

$dbconn = pg_connect('host=localhost dbname='.$database.' user="demo demo" password='.$password)
or die('connect failed');

is rejected by the server:pg_connect(): Unable to connect to PostgreSQL server: missing &quot;=&quot; after &quot;demo&quot;&quot; in connection info string in <b>/var/www/myhost.com/PGAccess/query.php

谢谢,Max

1 个答案:

答案 0 :(得分:1)

连接字符串是单引号,例如:

user='my user'

所以你需要:

'host=localhost dbname=$database user=\'demo demo\' password=$password'

.... 然而,名为O'Farrell的用户会破坏它。如果你关心这个,你还必须用'替换\'(即反斜杠 - 转义它)在字符串中...然后再次转义它,这样PHP就不会消耗引号,产生一个PHP字符串(未经测试):

'host=localhost user=\'O\\\'Farrell\' password=whatever'

由PHP解析为字符串以发送到PostgreSQL的客户端库:

host=localhost user='O\'Farrell' password=whatever

反过来将其解析为属性:

host: localhost
user: O'Farrell
password: whatever

您希望为密码和其他用户提供的字符串执行此操作。否则,恶意用户可以通过使用密码字符串中的注入来设置options=指令,从而在连接上传递可能不需要的设置。

如果您的客户端库支持它,则可能更容易使用基于libpq的基于PQoptions的连接,其中每个选项都是单独的字符串。这支持Python的psycopg2;我不知道PHP的Pg驱动程序或PDO是否支持它。