gpt4 book ai didi

PHP pg_connect 连接字符串

转载 作者:行者123 更新时间:2023-11-29 13:29:18 25 4
gpt4 key购买 nike

我正在尝试设置一个正确的连接字符串以从 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

谢谢,马克斯

最佳答案

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

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= 指令,通过从他们的密码字符串中注入(inject)来在连接上传递可能不需要的设置。

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

关于PHP pg_connect 连接字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27470601/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com