我编写了一些php网页使用的函数,以便与mysql数据库交互。当我在服务器上测试它们时,我得到了这个错误:
"Connect failed: Access denied for user 'root'@'localhost' (using password: YES)"
我可以在我的电脑上使用它们(使用XAMPP),并且可以使用服务器中的命令行浏览数据库的表。但是,网页无法连接。我已经检查了密码,但没有结果。这是正确的(否则我无法从命令行登录到mysql)。
函数调用如下:
$conn = new mysqli("localhost", "root", "password", "shop");
我必须在服务器中设置一些内容吗?感谢
编辑:PHP版本5.3.3-7+scruze1mysql版本:5.1.49-3二者都在debian 上
我用这种方式解决了:我使用root用户名登录
mysql -u root -p -h localhost
我用创建了一个新用户
CREATE USER 'francesco'@'localhost' IDENTIFIED BY 'some_pass';
然后我创建了数据库
CREATE DATABASE shop;
我已授予此数据库的新用户权限
GRANT ALL PRIVILEGES ON shop.* TO 'francesco'@'localhost';
然后我注销root并登录新用户
quit;
mysql -u francesco -p -h localhost
我使用脚本重建了数据库
source shop.sql;
就是这样。现在从php调用没有问题
$conn = new mysqli("localhost", "francesco", "some_pass", "shop");
感谢大家抽出时间:)
数据库中是否存在root@localhost?在MySQL中,您可以按主机设置不同的用户帐户权限。可能有几个不同的帐户具有相同的名称以及它们连接的主机。最常见的是root@127.0.0.1和root@localhost.这些可以具有不同的密码和权限。确保root@localhost存在,并且具有您期望的设置。
根据你的解释,我敢打赌这就是问题所在。从另一台电脑连接使用的帐户与root@localhost我认为命令行使用root@127.0.0.1.
从您到目前为止所说的,PHP5.3中的MySQL驱动程序在连接到旧的MySQL 4.1版本时出现问题。看看http://www.bitshop.com/Blogs/tabid/95/EntryId/67/PHP-mysqlnd-cannot-connect-to-MySQL-4-1-using-old-authentication.aspx
这里有一个类似的问题,有一些有用的答案,无法使用旧的身份验证连接到MySQL 4.1+
SELECT `User`, `Host`, Length(`Password`) FROM mysql.user
对于使用旧密码的帐户,这将返回16,对于使用新密码的帐户将返回41(对于完全没有密码的帐户则返回0,您可能还需要处理这些帐户)。要么使用MySQL前端的用户管理工具(如果有的话),要么使用
SET PASSWORD FOR 'User'@'Host'=PASSWORD('yourpassword');
FLUSH Privileges
我也遇到了这个问题。但这是因为另一个原因。我的密码以字符$
开头。。。例如$MyPassword
我把它改成了#MyPassword
,问题就解决了。
简单。
打开examplep控制面板->配置->用记事本编辑my.ini。现在将其添加到[mysqld]下面
skip-grant-tables
保存。启动apache和mysql。
我希望能帮助你
也许在这里
我认为代码应该是:
$connect = new mysqli("host", "root", "", "dbname");
因为root用户没有密码。(using password: YES)
表示"您正在使用此用户的密码"
提示:
如果无法连接到服务器,请注释掉pid和套接字文件。。mysql可能使用不正确的pid和/或套接字文件进行连接,因此,当您尝试通过命令行连接到服务器时,它"看起来"在不正确的pid/socket文件
###注释掉pid和套接字文件,如果您无法连接到服务器
#pid文件=/var/run/mysql/mysqld.pid#socket=/var/lib/mysql/mysql.socket
很可能它没有正确识别您的用户。root@localhost.选择您的MAMP正在使用的Mysql版本。
/Applications/MAMP/Library/bin/mysqldump -uroot -p db_name > test_db_dump.sql
实际上,我在电脑上写了一个别名,这样我就不必记得如何进入bin目录了。
alias mysqldumpMAMP='/Applications/MAMP/Library/bin/mysqldump'
这让我可以运行这个:
mysqldumpMAMP -uroot -p db_name > test_db_dump.sql
您可以在bash配置文件~/.bash_profile
或~/.bash_rc
中保存别名
可能是因为没有设置密码,您将密码作为参数传递。请尝试在连接期间提交密码参数。。
编辑您在PHPmyAdmin(WAMP)上的权限,注意您的密码和用户名尚未创建。因此,一定要创建或编辑它,这样它就可以与php中的sql连接一起工作。希望它能在上运行
尝试初始化变量并在连接对象中使用它们:
$username ="root";
$password = "password";
$host = "localhost";
$table = "shop";
$conn = new mysqli("$host", "$username", "$password", "$table");