6

我将数据库的所有登录信息存储在公共树之外的文件中的变量中,例如

$hostname = '172.0.0.0';
$dbname = 'myname_mydbname';
$username = 'myname_user';
$pw = 'password';

这很标准。

问题是我正在使用的这个特定主机需要myname_将 附加到所有数据库和用户名的前面。当我存储这些字符串并将它们传递给 PDO 时,它会将用户名中的所有内容放在 myname 之后,并将密码字符串放在一起......如果我将用户名和密码作为字符串而不是变量放在函数中,一切正常。我已经黔驴技穷了。谁能帮忙?这是代码中的函数。

不工作:

$this -> DB = new PDO ("mysql:host={$hostname}; dbname={$dbname}", $username, $pw);

作品:

$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", 'myname_user', 'password');

我希望这里的某个人能让我感到愚蠢......在此先感谢。-大卫

该错误可能会有所帮助...

无法获取数据库句柄:SQLSTATE [28000] [1045] 用户“myname”@“localhost”的访问被拒绝(使用密码:否)

4

3 回答 3

0

我在 PDO 文档中找不到的任何内容都表明您可以在 DSN 字符串中指定用户名或密码 - 它是“数据库源名称”而不是“数据库源名称和身份验证”字符串您没有使用密码的事实应该是一个提示这个,并且用户名是'myname'可能只是因为大多数RDBM使用$USER环境变量来连接,如果没有指定(我必须假设设置为'myname')

即我认为你只需要使用额外的参数来传递身份验证凭据

于 2010-10-13T23:14:17.537 回答
0

作为一种解决方法,我在文件中构建了 get 函数,该函数存储了返回字符串的信息,并且它可以工作。超级奇怪,但它有效。

于 2010-10-13T23:34:14.313 回答
0

您应该通过附加引号获得相同的结果

 ////the variable
 $myusr='myname_user'; 

////now append quotes
    $user="'".$myusr."'"; 

///which would be the same thing as
  $psswd= "'pass_word'";

pdo 函数将去掉单引号 ( ' ' ) 如果你想用引号将它存储在你的 sql 语句中它会是 '\'password\'' 因为存储的引号必须与分隔符一起存储以防止自动转义。

  INSERT INTO `Auth_USERs` (`id`, `usrname`, `passwd`, `email`, `reg_date`) VALUES (NULL, '\'myname_user\'', '\'pass_word\'', 'someone@somewhere.com', CURRENT_TIMESTAMP);

你遇到了 {} 因为这将变量视为容器内部,所以它附加了 ' ' 当然 get 数组也会这样做(使用不同的字符,然后 php 在下一页加载时将它们转义),因为你正在执行 java函数来使您的 get 函数,您实际上是在附加未转义的引号。直到 PDO 函数转义它们。

$this -> DB = new PDO ("mysql:host={$hostname};dbname={$dbname}", $user, $psswd);
于 2017-06-03T00:34:24.317 回答