[英]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 "=" after "demo"" 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.