-1

当我尝试连接到本地 MySQL 数据库时,我从这三种方法中得到不同的结果:

  1. 当我从提示连接以下内容时,它可以工作:

    mysql -u 根目录 -p

这种方式会提示我输入密码,一旦输入,我就会连接。

  1. 当我连接 PHP 并提供服务器(localhost)、用户名(root)和密码时,它可以工作。

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

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

当我在第一行提供密码时,我也无法让它从提示中工作。

当我查询用户 root 的 mysql.user 表时,有 3 个条目:

root@:: root@127.0.0.1 root@localhost

在同一行中提供密码时出现的错误是:

错误 1045 (28000): 用户 'root'@'localhost' 的访问被拒绝(使用密码:是)

有人知道发生了什么吗?

4

3 回答 3

1

如果您的密码包含 shell 将解释的特殊字符,除非您对它们进行转义,否则您将遇到问题。例如,大量标点符号会导致问题,例如!, >,<等等|

不过,一般来说,如果可能的话,不要将密码放在命令行上!

引用 MySQL 的5.3.2.2。最终用户密码安全指南文档:

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

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

另一种选择是将密码存储在只有相关用户才能读取的文件中,并使用客户端配置文件:

将密码存储在选项文件中。

[client]
password=your_pass

那么命令行将是:

mysql --defaults-file=/path/to/file_with_password
于 2012-04-04T16:08:17.663 回答
1

只需像这样添加主机参数:

exec('mysql -P 3306 -h localhost -u root -p'.$password.' databasename < '.$scriptfilename);
于 2012-04-04T15:36:49.127 回答
0

您可以尝试使用--password= 而不是-p,我发现它更可靠

于 2012-04-04T15:38:34.413 回答