0

I'm using this code to connect to a MySQL database:

username="root"
password="admin"
host="localhost"
db="one"
Mysql.new(host,username,password,db)

I got this error while executing the code:

Access denied for user 'root'@'localhost' (using password: YES)

If I use Mysql.new('localhost','root','admin','one') then it works fine.

When I print all the variables the correct values are printed.

Please help me figure out what's wrong.

4

1 回答 1

4

基本故障排除 101:

如果文字字符串起作用,而变量赋值不起作用,那么怀疑你的变量赋值;其中一个可能有问题,例如隐形字符。

尝试:

vars = ('localhost','root','admin','one')
Mysql.new(*vars)

然后尝试:

vars = %w(localhost root admin one)
Mysql.new(*vars)

或者:

host, username, password, db = %w(localhost root admin one)
Mysql.new(host, username, password, db)

或者:

host, username, password, db = 'localhost','root','admin','one'
Mysql.new(host, username, password, db)

这个想法是从你知道的工作开始,然后向后工作,直到分配给变量工作,或者它坏了。那时你要么解决了问题(可能不知道为什么),要么你已经知道是什么破坏了它。无论哪种方式,你都领先。

你说:

当我打印所有变量时,会打印正确的值。

你是如何打印变量的?我们看不到您的终端,您也没有向我们提供该信息。如果它是一个不可见的字符,这是复制和粘贴文本时的常见罪魁祸首,打印时它可能不会显示。检查变量应该会有所帮助,因为它们应该显示为转义值:

password = "root\u00a0"

puts password
# >> root 

puts password.inspect
# >> "root "

puts password.chars
# >> r
# >> o
# >> o
# >> t
# >>  

puts password.unpack('C*').map{ |s| s.to_s(16) }
# >> 72
# >> 6f
# >> 6f
# >> 74
# >> c2
# >> a0

否则,我回到我原来的评论,这是你如何设置你的 MySQL root 帐户的问题,你应该阅读“用户'root'@'localhost'的访问被拒绝(使用密码:YES)(Mysql::错误) ”。

于 2013-08-26T15:17:22.107 回答