PHP中mysql_connect的奇怪行为

PHP中mysql_connect的奇怪行为,php,mysql,sql,connection,behavior,Php,Mysql,Sql,Connection,Behavior,这就是如何在本地主机上创建到MySQL服务器的连接 $Connection = mysql_connect("localhost","root",""); 但是MySQL似乎忽略了我的用户名和密码,即使我使用一些毫无意义的用户名和密码创建连接: $Connection = mysql_connect("localhost","nonsense-username",""); 这两种情况都将$Connection作为“类型(mysql-link)的资源(39)”提供给我。只有当密码为空时才会发生

这就是如何在本地主机上创建到MySQL服务器的连接

$Connection = mysql_connect("localhost","root","");
但是MySQL似乎忽略了我的用户名和密码,即使我使用一些毫无意义的用户名和密码创建连接:

$Connection = mysql_connect("localhost","nonsense-username","");
这两种情况都将$Connection作为“类型(mysql-link)的资源(39)”提供给我。只有当密码为空时才会发生这种情况。当密码为空时,MySQL是否默认接受任何用户名


但当给出这样的“胡说八道的用户名”时,它应该有$Connection等于'false'。有什么问题吗?

我假设您在自己的计算机上安装了MySQL服务器,而没有配置用户、权限或类似的内容。如果是这种情况,那么原因可能是SQL安全模式。如果在php.ini文件中,sql.safe_mode设置为1,那么php将用默认值替换传递给mysql_connect()的任何参数。这当然可以解释这种行为。尝试查看phpinfo()以确定是否是这种情况。

在安装php mysql之后,您似乎还没有重新启动Web服务器。请重新启动Web服务器,它应该可以工作。
我花了两个小时调试它,简单的解决方案是重新启动

奇怪的是,“php.ini”中的sql.safe_模式不可用。我的回答没有解释您的注意,这只会在密码为空时发生。当然,当密码为空时,允许任何连接不是默认的MySQL行为。这对你能想到的无意义的用户名有用吗?空用户名呢?是的,只要用户“root”的密码为空,mysql就接受任何字母数字用户名。mysql快把我逼疯了……为什么,这很容易检查;只需设置一个根密码,看看是否可以解决问题。如果您不是运行此站点的db管理员,您可以指望设置root密码,或者您需要更改hosing提供程序。另一方面,如果您是该站点将运行的db管理员,那么最好设置根密码,并为每个数据库授予自己的用户,仅对该数据库具有权限。这样,如果出现安全漏洞,只有一个数据库会被破坏。在大型站点上,db管理员实际上只为某些表甚至行创建用户。