我正在使用此代码连接到MySQL数据库:
username="root"
password="admin"
host="localhost"
db="one"
Mysql.new(host,username,password,db)
执行代码时出现此错误:
Access denied for user 'root'@'localhost' (using password: YES)
如果我使用Mysql.new('localhost','root','admin','one')
,那么它可以正常工作。
当我打印所有变量时,将打印正确的值。
请帮我弄清楚出了什么问题。
答案 0 :(得分: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帐户的问题,你应该阅读“Access denied for user 'root'@'localhost' (using password: YES) (Mysql::Error)”。