2012-04-04 123 views
-1

当我尝试连接到本地MySQL数据库,我从以下三种方法获得不同的结果MySQL连接问题:提供密码

  1. 当我从提示以下连接它的工作原理:

    的mysql -u根-p

这样提示我输入密码,一旦输入我连接。

  1. 它适用于我连接PHP并提供服务器(本地主机),用户名(root)和密码。 。

  2. 它,当我用PHP连接到运行如下命令不起作用:。

    EXEC( '的mysql -P 3306 -u根-p' $密码 '数据库名称<' $ scriptfilename);

当我在第一行提供密码时,我也无法从提示符中找到它。

当我查询用户root mysql.user表中有3项:

根@ :: [email protected] 根@本地

有错误我供应的时候得到在同一行中的密码是:

ERROR 1045(28000):访问被拒绝的用户 '根' @ '本地主机'(使用密码:是)

有人知道发生了什么事吗?

+0

你可以尝试呼应了EXEC(串),并将其粘贴到一个bash shell来检查它是否有效 – dhchen 2012-04-04 15:38:49

回答

1

如果您的密码中包含特殊字符的shell会解释,除非你逃脱它们,否则你会遇到问题。例如,很多标点符号会导致问题,例如!,>,<,|等等。

一般来说,如果你可以帮忙的话,不要把密码放在命令行上!

引述MySQL的5.3.2.2. End-User Guidelines for Password Security文件:

使用-pyour_pass或--password = your_pass的选项在命令行上。

这很方便但不安全,因为您的密码对系统状态程序(例如ps可能会被其他用户调用以显示命令行)变得可见。

的另一种选择是存储在只有培训相关用户可以读取文件的密码,并使用客户端配置文件:

Store中的选项文件的密码。

[client] 
password=your_pass 

然后在命令行是:

mysql --defaults-file=/path/to/file_with_password 
+0

密码确实包含特殊字符,并且一旦更改为安全/安全密码,在需要的地方不需要转义字符,并且效果很好。谢谢。 – 2012-04-05 03:06:32

+0

您可以将密码存储在一个文件中(某处安全!)并使用它,而不是让您的密码更加复杂。这样,任何可以列出正在运行的进程的人都不会看到密码!我会用更多信息更新答案。 – Cylindric 2012-04-05 08:39:55

1

只需添加主机参数如下:

exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename); 
+0

我试着这同样的结果。由于某种原因,当我在同一行提供密码时,它不起作用。 – 2012-04-04 15:42:03

0

你可以尝试使用--password =而非-p,我发现它更可靠

+0

感谢您试图提供帮助,但最终导致使用造成问题的特殊字符。 – 2012-04-05 03:07:49

相关问题