我写了一些php网页使用的函数,以便与mysql数据库进行交互.当我在我的服务器上测试它时,我收到此错误:
"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)"
Run Code Online (Sandbox Code Playgroud)
我可以在我的电脑上使用它们(使用XAMPP),我可以使用服务器中的命令行浏览数据库的表格.但是,网页无法连接.我已经检查了密码但没有结果.这是正确的(否则我无法从命令行登录到mysql).
该函数的调用如下:
$conn = new mysqli("localhost", "root", "password", "shop");
Run Code Online (Sandbox Code Playgroud)
我必须在我的服务器中设置一些东西吗?谢谢
编辑:PHP版本5.3.3-7 + squeeze1 mysql版本:5.1.49-3都在debian上
我收到以下错误:
数据库连接失败:mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+.请使用管理工具使用该命令重置密码
SET PASSWORD = PASSWORD('your_existing_password').这将存储一个新的,更安全的哈希值
mysql.user.如果在PHP 5.2或更早版本执行的其他脚本中使用此用户,则可能需要从my.cnf文件中删除旧密码标志
我在我的本地机器上使用PHP 5.3.8和MySQL 5.5.16,我的主机(media temple)运行PHP 5.3 MySQL 5.0.51a.实时服务器上的版本比我机器上的版本旧.
如何修复此错误并从本地计算机连接到MySQL?
我知道这个帖子有类似的帖子,但是我已经尝试了所有这些帖子,但没有一个在工作.
我知道有很多问题与我的问题一样,但我希望你能帮助我找到另一个解决方案.
我们正在为我们的项目使用Symfony 2.5.10,PHP 5.4.44和MySQL 4.1.20.
每当我尝试登录系统或任何与数据库连接有关的行为时(例如使用FOS命令添加新用户),我都会收到此错误:
SQLSTATE [HY000] [2000] mysqlnd无法使用旧的不安全身份验证连接到MySQL 4.1+.请使用管理工具使用命令SET PASSWORD = PASSWORD('your_existing_password')重置密码.这将在mysql.user中存储一个新的,更安全的哈希值.如果在PHP 5.2或更早版本执行的其他脚本中使用此用户,则可能需要从my.cnf文件中删除旧密码标志
我们已经尝试设置old_passwords中my.cnf为0,重启MySQL,为MySQL用户设置新密码并重新启动MySQL,但仍然是相同的.每当我们在查询窗口中运行它时:
SELECT user, Length(Password) FROM mysql.user;
Run Code Online (Sandbox Code Playgroud)
它仍然显示16作为我们正在使用的用户的密码长度.并且在检查mysql服务器变量和设置时,old passwords也是ON(即使我们已经在my.cnf中将old_password设置为0).
这可能有什么问题?我将衷心感谢您的帮助.
更新:与此同时,我们删除了db用户的密码,以便我们能够访问数据库.但是我仍在寻找其他解决方案,因为我在网上找到的解决方案(比如old_passwords=1在my.cnf中删除或评论,将old_passwords设置为0并设置新密码然后重启)对我来说不起作用.
另一个更新:通常,这个问题的解决方案将old_passwords在mysql中启动,但是,如PHP文档中所述,
新的mysqlnd库不读取mysql配置文件(my.cnf/my.ini).
那么这是否意味着设置old_passwords为0 in my.cnf没有用?我仍然没有找到解决这个问题的方法.
我们是否需要在所使用的任何平台上进行升级?在此先感谢您的帮助.
我正在尝试从位于slicehost(两个不同的托管公司)的服务器中的php脚本连接到dreamhost的mysql服务器.我需要这样做,所以我可以在slicehost将新数据传输到dreamhost.使用转储不是一个选项,因为表结构是不同的,我只需要传输一小部分数据(100-200每日记录)问题是我在slicehost使用新的MySQL密码哈希方法,而dreamhost使用旧的,所以我得到
$link = mysql_connect($mysqlHost, $mysqlUser, $mysqlPass, FALSE);
Warning: mysql_connect() [function.mysql-connect]: OK packet 6 bytes shorter than expected
Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using old authentication
Warning: mysql_query() [function.mysql-query]: Access denied for user 'nodari'@'localhost' (using password: NO)
Run Code Online (Sandbox Code Playgroud)
事实:
对我来说更明显的选择是在dreamhost上开始使用新的MySQL密码哈希方法,但它们不会改变它,我不是root,所以我不能自己做.
任何疯狂的想法?
通过VolkerK消化:
mysql> SET SESSION old_passwords=0;
Query OK, 0 rows affected (0.01 sec)
mysql> SELECT @@global.old_passwords,@@session.old_passwords, Length(PASSWORD('abc'));
+------------------------+-------------------------+-------------------------+
| @@global.old_passwords | @@session.old_passwords | Length(PASSWORD('abc')) |
+------------------------+-------------------------+-------------------------+
| 1 | 0 | …Run Code Online (Sandbox Code Playgroud) 无法使用提供的设置连接到数据库服务器.
我一直无法将应用程序连接到远程数据库.我在运行应用程序时收到上面显示的错误.我在这个网站上看过这个问题的先前答案,但我没有运气解决它.从我学到的东西,我需要替换主机名,让我的mysql数据库接受外部连接,我已经完成了.我通过mysql命令行在我的database.php中尝试了相同的值,它可以工作.
那还有什么我可能会失踪?
这是我在database.php中的设置:
$active_group = 'staging';
$active_record = TRUE;
$db['default']['hostname'] = 'localhost';
$db['default']['username'] = 'root';
$db['default']['password'] = '';
$db['default']['database'] = 'myDatabase';
$db['default']['dbdriver'] = 'mysql';
$db['default']['dbprefix'] = '';
$db['default']['pconnect'] = TRUE;
$db['default']['db_debug'] = TRUE;
$db['default']['cache_on'] = FALSE;
$db['default']['cachedir'] = '';
$db['default']['char_set'] = 'utf8';
$db['default']['dbcollat'] = 'utf8_general_ci';
$db['default']['swap_pre'] = '';
$db['default']['autoinit'] = TRUE;
$db['default']['stricton'] = FALSE;
$db['staging']['hostname'] = 'XX.XX.XXX.XXX';
$db['staging']['username'] = 'user';
$db['staging']['password'] = 'pwd';
$db['staging']['database'] = 'myDatabase';
$db['staging']['dbdriver'] = 'mysql';
$db['staging']['dbprefix'] = '';
$db['staging']['pconnect'] = TRUE;
$db['staging']['db_debug'] = TRUE;
$db['staging']['cache_on'] …Run Code Online (Sandbox Code Playgroud) 我想使用 shell 命令连接到外部服务器上的 mysql 数据库。Ubuntu 版本 16.04。
mysql -uXXXXXX -pYYYYYY -h domain.com
Run Code Online (Sandbox Code Playgroud)
我得到错误:
mysql: [Warning] Using a password on the command line interface can be insecure.
ERROR 2059 (HY000): Authentication plugin 'mysql_old_password' cannot be loaded: /usr/lib/mysql/plugin/mysql_old_password.so: cannot open shared object file: No such file or directory
Run Code Online (Sandbox Code Playgroud)