簡體   English   中英

PHP pg_connect連接字符串

[英]PHP pg_connect connection string

我正在嘗試設置適當的連接字符串以從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=指令,從而在連接上傳遞潛在的有害設置。

如果您的客戶端庫支持它,則使用基於libpq的PQoptions的連接可能會更容易,其中每個選項都是一個單獨的字符串。 這由Python的psycopg2支持; 我不知道PHP的Pg驅動程序或PDO是否支持它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM