我正在尝试设置一个正确的连接字符串,以便从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 "=" after "demo"" in connection info string in <b>/var/www/myhost.com/PGAccess/query.php
谢谢,Max
答案 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是否支持它。