当我尝试连接到本地MySQL数据库时,我得到了这三种方法的不同结果:
当我从提示符处连接以下内容时,它会起作用:
mysql -u root -p
这种方式提示我输入密码,输入后我就连接了。
当我连接PHP并提供服务器(localhost),用户名(root)和密码时,它可以正常工作。
当我连接PHP以运行这样的命令时不起作用:
exec('mysql -P 3306 -u root -p'。$ password。'databasename<'。$ scriptfilename);
当我在第一行提供密码时,我也无法从提示符开始工作。
当我在mysql.user表中查询用户root时,有3个条目:
根@ :: root@127.0.0.1 根@本地
在同一行提供密码时出现错误:
ERROR 1045(28000):用户'root'@'localhost'拒绝访问(使用密码:YES)
有人知道发生了什么事吗?
答案 0 :(得分:1)
只需添加如下主机参数:
exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename);
答案 1 :(得分:1)
如果您的密码包含shell将解释的特殊字符,除非您将其转义,否则您将遇到问题。例如,大量标点符号会导致问题,例如!
,>
,<
,|
等。
一般情况下,如果您可以提供帮助,请不要在命令行中输入密码!
引用MySQL的 5.3.2.2. End-User Guidelines for Password Security 文档:
在命令行中使用-pyour_pass或--password = your_pass选项。
这很方便但不安全,因为您的密码对系统状态程序(例如ps)可见,其他用户可以调用它来显示命令行。
另一种选择是将密码存储在只有相关用户可以读取的文件中,并使用客户端配置文件:
将您的密码存储在选项文件中。
[client]
password=your_pass
然后命令行将是:
mysql --defaults-file=/path/to/file_with_password
答案 2 :(得分:0)
您可以尝试使用--password =而不是-p,我发现它更可靠