12

我似乎无法使用 php 脚本连接到 mysql,即使我可以使用 phpmyadmin 正常连接。我创建了一个带有密码的用户,并为它提供了数据库的适当权限,但每次连接时它都会死,说访问被拒绝。我在 windows xp 盒子上使用 xampp。防火墙都被禁用了,我检查了用户名和密码是否正确。这是代码:

$conn=mysql_connect('localhost','westbrookc16','megadots') || die (mysql_error());

用户名是否必须采用特定格式或其他形式?

4

8 回答 8

17

我有一种预感,这里的问题是您授予它的主机,尽管这实际上只是一个有根据的猜测。如果您授予访问权限 myuser@'127.0.0.1' 或服务器的实际 IP 地址,则不允许您使用 localhost 作为主机进行连接。这是因为当“localhost”被指定为主机时,php 将假定您想要使用 unix 套接字而不是网络套接字,并且在该上下文中 127.0.0.1 与 localhost 不同。

从mysql_connect()的手册条目中:

注意:每当您指定“localhost”或“localhost:port”作为服务器时,MySQL 客户端库将覆盖它并尝试连接到本地套接字(Windows 上的命名管道)。如果要使用 TCP/IP,请使用“127.0.0.1”而不是“localhost”。如果 MySQL 客户端库尝试连接到错误的本地套接字,您应该在 PHP 配置中将正确的路径设置为运行时配置,并将服务器字段留空。

希望这不是完全多余的。:)

于 2009-03-20T23:07:44.930 回答
6

我以前见过这种情况,一个 mysql 用户通过 php 登录,而另一个没有。有时用户甚至使用命令行而不是 php。

这一直是埃米尔提到的两个。mysql 用户实际上是用户/主机对。所以用户 megadots@localhost 和用户 megadots@mycoolhost 在 mysql.user 表中作为两个单独的记录列出。

如果您可以从命令行登录,请运行此查询。

SELECT user, host FROM mysql.user

您应该会看到用户及其主机的完整列表。

如果您认识正在工作的 phpMyAdmin 用户,请查看可能是您要使用的主机的主机列。

重置主机运行这些查询(!小心使用特权表进行整个mysql安装)

update mysql.user set host = 'hostname' 
where user = 'username' and host = 'oldhostname';

flush privileges;

如果您看到一条以用户名和 % 作为主机的记录将优先于其他所有内容,如果该用户有多个记录,并且其中一个以 % 作为主机,则以 % 作为主机的用户名可能有密码错误,无论您重置 username@localhost 的密码多少次,它都是无效的,因为它会在登录时与 username@% 进行比较。

于 2009-03-21T00:26:59.140 回答
2

如果您使用的是 Linux,请使用 synaptic 包管理器来查找和下载 PHP 和 MySQL 需要的所有库和模块,以便它们都可以连接。我的问题是单独运行的 PHP 脚本在服务器端工作,但是当我尝试使用 PHP 脚本连接到 MySQL 时,它无法连接,我只会看到一个纯白页面。然后我注意到我没有 PHP 用来连接 MySQL 的 MySQL 客户端库。我只有 MySQL 服务器库。一旦我安装了客户端库并重新启动了 apache 服务器,我的 PHP 脚本连接就没有问题了。默认情况下,PHP 5 不随 MySQL 客户端库一起安装。

于 2011-12-19T21:27:01.010 回答
2

就我而言,我已经删除了用于创建我正在使用的数据库的用户。通常这应该给出错误“用户指定的定义器不存在”,但由于某种原因,它只是返回了对我的 PHP 代码的更一般的访问被拒绝。我不确定为什么我仍然可以通过命令行和其他界面登录。为了纠正我的问题,我重新创建了被删除的用户。

于 2012-07-14T21:19:39.530 回答
0

并赋予它适当的数据库权限

如何?授予用户时,您为用户使用了什么主机?

这是通常的做法:

GRANT ALL ON mydb.* TO 'someuser'@'somehost' identified by 'password';
FLUSH privileges;

在您的情况下,“somehost”可能应该是“localhost”或“127.0.0.1”(参见其他帖子)

语法参考:http ://dev.mysql.com/doc/refman/5.1/en/grant.html

于 2009-03-20T23:01:22.233 回答
0

这可能是一个错字,或者您没有授予权限。有时很难发现这些。

我建议不要使用 phpmyadmin,而是下载一份SQLYOG(免费社区版很棒)并尝试通过它与您的用户登录。诊断出问题后,将用户名/密码复制/粘贴回您的脚本。

顺便说一句,phpmyadmin 很好,但是像 sqlyog 这样的程序通常更方便,所以无论如何都值得一试——我相信你会被转换的。如果 sqlyog 不太符合您的口味,还有其他几种免费和商业替代品。

于 2009-03-20T23:03:29.997 回答
0

在遇到类似问题后,我发现将 '127.0.0.1' 替换为 'localhost' 可以解决问题(尽管我能够使用 'localhost' 通过终端成功连接)。

于 2013-07-02T19:30:04.250 回答
0
  1. 确保您已使用 MySQL 扩展配置 PHP。在 MacPorts 上,您需要单独安装它:
me@lastdance Sites % sudo port search php | grep mysql
php-mysql-xdevapi @8.0.17 (php, devel)
php52-mysql @5.2.17 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php53-mysql @5.3.29 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php54-mysql @5.4.45 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php55-mysql @5.5.38 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php56-mysql @5.6.40 (php, databases)
a PHP interface to MySQL databases, including the mysql, mysqli and pdo_mysql extensions
php70-mysql @7.0.33 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php71-mysql @7.1.32 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php71-mysql-xdevapi @8.0.17 (php, devel)
php72-mysql @7.2.23 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php72-mysql-xdevapi @8.0.17 (php, devel)
php73-mysql @7.3.10 (php, databases)
a PHP interface to MySQL databases, including the mysqli and pdo_mysql extensions
php73-mysql-xdevapi @8.0.17 (php, devel)
me@lastdance Sites % sudo port install php73-mysql
--->  Computing dependencies for php73-mysql
--->  Cleaning php73-mysql
--->  Scanning binaries for linking errors
--->  No broken files found.
--->  No broken ports found.
me@lastdance Sites %
  1. 确保在 php.ini 文件中正确指定了 localhost mysql 套接字。看到我的数据库用户存在,但我仍然得到一个(HY000/2002):没有这样的文件或目录

在我的系统上,我必须编辑文件/opt/local/etc/php73/php.ini并添加以下内容:

; Default socket name for local MySQL connects.  If empty, uses the built-in
; MySQL defaults.
; http://php.net/mysqli.default-socket
mysqli.default_socket = /opt/local/var/run/mysql8/mysqld.sock
于 2019-10-25T21:43:12.940 回答