【问题标题】:PDO cannot connect if password contains spaces如果密码包含空格,PDO 无法连接
【发布时间】:2012-10-31 01:18:42
【问题描述】:

我正在使用 PDO 和 PHP 创建一个 PHP 网站,但我的 DSN(用于 Postgresql)没有连接到数据库,而 Mysql 工作正常。

我正在尝试使用密码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', 'a b c')
#1 {主要}
它正在工作!

Example code:

<?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";
}

【问题讨论】:

  • 你能发布你正在使用的代码吗?
  • @Blender 不,我曾经尝试过使用 Postgresql 数据库不工作,而不是使用 sql 尝试过
  • @Daedalus ,null , blender 我该怎么办???
  • -1 非常不具体,没有错误消息,没有版本,措辞不明确,没有研究工作的迹象。

标签: php postgresql pdo


【解决方案1】:

这是 php (no Bug #62479) 中的一个错误,当您尝试使用包含 1 个或多个空格的密码连接到 Postgresql 数据库时,pdo 将无法连接

你必须使用goget2me(密码中没有空格)

【讨论】:

  • @Daedalus 通过修改后的问题进行补救,通过外观。另外,说真的,每次我看到关于它的问题时,PDO 似乎都更可怕。很好地解决了这个问题 NullPointer 发生了什么:-)
  • 看起来不是将其放入 DSN 而是将其作为用户名和密码提供确实有效。
  • @scrolllock 你可以使用str_replace php函数来删除空格
  • @jhonraymos 这与删除空间无关..考虑用户的数据库密码有空格然后 str_replace 没有意义的情况。它将删除行为类似于角色的空间
  • @NullPointer 在这种情况下你什么都做不了因为这是一个错误。你可以在将空格插入数据库时​​删除空格,这样就不会出现未来......?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-09-22
  • 2012-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-09-01
  • 1970-01-01
相关资源
最近更新 更多