php db变量中的下划线导致问题

时间:2010-10-13 23:04:13

标签: php mysql pdo mysql-error-1045

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

$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');

我希望有人能让我感到愚蠢...提前谢谢。 -David

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

  

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分: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);