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

导致问题的php db变量中的下划线,php,mysql,pdo,mysql-error-1045,Php,Mysql,Pdo,Mysql Error 1045,我将数据库的所有登录信息存储在公共树之外的文件中,存储在变量中,例如 $hostname = '172.0.0.0'; $dbname = 'myname_mydbname'; $username = 'myname_user'; $pw = 'password'; 这很标准 问题是,我正在使用的这个特定主机需要将myname\uu附加到所有数据库和用户名的前面。当我存储这些字符串并将它们传递给PDO时,它会删除用户名中myname之后的所有内容,并一起删除密码字符串。。。如果我把用户名和密码

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

$hostname = '172.0.0.0';
$dbname = 'myname_mydbname';
$username = 'myname_user';
$pw = 'password';
这很标准

问题是,我正在使用的这个特定主机需要将
myname\uu
附加到所有数据库和用户名的前面。当我存储这些字符串并将它们传递给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');
我希望这里有人能让我觉得自己很愚蠢。。。提前谢谢。 -大卫

这个错误可能会有帮助

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


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


i、 e.我认为您只需使用额外的参数来传递身份验证凭据,作为一种解决方法,我在文件中构建了get函数,该函数存储了返回字符串的信息,并且可以正常工作。超级奇怪,但它可以工作。

添加引号应该会得到相同的结果

 ////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);

尝试
var\u转储($username)就在
新PDO
语句之前。这很有趣。我得到空值。$hostname='172.0.0.0'$dbname='myname_mydbname'$用户名='myname_user'$pw=‘密码’;都存放在同一个地方。。。很抱歉将其放在三个不同的注释中。必须检查-对于某些后端(例如postgreSQL),您可以在DSN中指定身份验证,但不能在mysql中指定身份验证。好的,看起来变量实际上在使用它们的文件中显示为null。不过,假设$USER就是因为它,所以你是对的。我将不得不解决为什么变量为空的问题,我可以从它们存储的文件中回显一条语句,所以我知道它被包括在内。哎呀,我误解了你的问题很多:(这是在一个函数中调用的吗,你有全局$username吗?这是一个陷阱,我已经多次落入$this->DB=new PDO。)(“mysql:host=“.getHost()。”dbname=“.getDBName(),getUserName(),getPW());