【问题标题】:Strange behavior of mysql_connect in PHPPHP中mysql_connect的奇怪行为
【发布时间】:2011-10-22 07:22:26
【问题描述】:

这是在 localhost 上创建与 MySQL 服务器的连接的方式

$Connection = mysql_connect("localhost","root","");

但 MySQL 似乎忽略了我的用户名和密码,即使我使用一些无意义的用户名和密码创建连接:

$Connection = mysql_connect("localhost","nonsense-username","");

这两种情况都给我 $Connection 作为“类型的资源(39)(mysql链接)”。只有当密码为空时才会发生这种情况。密码为空时接受任何用户名是 MySQL 的默认行为吗?

但是当给出这样的“废话用户名”时,它应该让 $Connection 等于“假”。有什么问题吗?

【问题讨论】:

    标签: php mysql sql connection behavior


    【解决方案1】:

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

    【讨论】:

    • 奇怪的是'php.ini'中的sql.safe_mode是关闭的
    • 我的回答并没有解释你的注意,只有当密码为空时才会发生这种情况。 AFAIK 当密码为空时允许任何连接不是默认的 MySQL 行为。这对你能想到的任何个无意义的用户名有用吗?用户名空怎么办?
    • 是的,只要用户 'root' 的密码为空,mysql 接受任何字母数字用户名。 mysql 快把我逼疯了……
    • 为什么,这很容易检查;只需设置一个root密码,看看是否可以解决问题。如果您不是运行此站点的数据库管理员,您可以指望它会设置 root 密码,或者您需要更改软管供应商。另一方面,如果您此站点将运行的数据库管理员,则最好设置一个root 密码,并为每个数据库提供其自己的用户,该用户仅具有该数据库的权限。这样,如果出现安全漏洞,只有一个数据库会受到威胁。在大型网站上,数据库管理员实际上只会为某些表甚至行创建用户。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2012-03-04
      • 1970-01-01
      • 1970-01-01
      • 2014-07-08
      • 2013-08-09
      • 2021-11-21
      • 2018-05-20
      • 2012-01-07
      • 1970-01-01
      相关资源
      最近更新 更多