4

PHPでPDOを使用してPHPWebサイトを作成していますが、Mysqlが正常に機能しているときにDSN(Postgresql用)がデータベースに接続していません。

パスワードを試してみましたa b c

エラー:例外「PDOException」とメッセージ「SQLSTATE [08006][7]/var/www/owncloud/pg_test.php:11
スタックトレースの「接続情報文字列」の「b」の後に「=」がありません:
#0 / var / www / owncloud / pg_test.php(11):PDO-> __construct('pgsql:dbname = te ...'、'test'、'ab c')
#1 {main}
動作しています!

サンプルコード

<?php

/** createuser -d -R -S -P test
* => set password to "a b c"
*/

$dsn = "pgsql:dbname=test;host=localhost";
$user = "test";
$psw = "a b c";
try{
  $db = new PDO($dsn,$user,$psw);
  echo "Oh gosh!\n";
}catch(PDOException $e){
  echo "Error :" . $e."\n";
}

$e_user = addslashes($user);
$e_password = addslashes($psw);
$psw = $user = null;
$dsn .= ";user='$e_user';password='$e_password'";

try{
  $db = new PDO($dsn,$user,$psw);
  echo "it's working!\n";
}catch(PDOException $e){
  echo "Error :" . $e."\n";
}
4

1 に答える 1

10

これはphpのバグ(バグ#62479なし)で、1つ以上のスペースを含むパスワードを使用してPostgresqlデータベースに接続しようとすると、pdoが接続に失敗します。

あなたは次のように使用する必要が goget2meあります(パスワードにスペースなし)

于 2012-11-11T08:57:44.257 に答える