代码之家  ›  专栏  ›  技术社区  ›  Evernoob

MySQL-PHP不兼容

  •  22
  • Evernoob  · 技术社区  · 16 年前

    我在本地运行WAMP,但连接到远程MySQL数据库。PHP的本地版本是最新的5.3.0。

    其中一个远程数据库版本为5.0.45,工作正常。但是,我尝试连接到的另一个远程数据库(版本5.0.22)在死机之前抛出以下错误:

    警告:mysql_connect()[function.mysql connect]:OK数据包比预期短6字节。PID=5880英寸。。。

    世界跆拳道联盟?

    更新:

    恢复到PHP5.2.*即任何低于5.3.0的版本都可以完全解决问题。只要我没有运行5.3.0,我就可以连接到这两个数据库。我不确定是什么解释了这种奇怪。

    9 回复  |  直到 6 年前
        1
  •  45
  •   Chandra Sekhar    14 年前

    您使用的MySQL帐户可能有一个16个字符长的旧密码(哈希)。
    您可以使用MySQL客户端(如HeidiSQL、MySQL控制台客户端或任何其他客户端)和访问 mysql . user mysqlnd 无法使用它连接到MySQL服务器。

    SET PASSWORD FOR 'username'@'hostmask' = PASSWORD('thepassword')
    

    看见 dev_mysql_set_password

    编辑:
    您还应该检查服务器是否设置为 use/create old passwords by default .


    请运行查询

    SELECT
      Length(`Password`),
      Substring(`Password`, 1, 1)
    FROM
      `mysql`.`user`
    WHERE
      `user`='username'
    

    在5.0.22服务器上(出现“故障”的服务器)。代替 username 通过您在mysql_connect()中使用的帐户。
    那会有什么回报?

        2
  •  7
  •   Matt    16 年前

    我一直在试图找到一个解决这个问题的简单方法。试试这种方法。在MySQL类型中

    SELECT Host, User, Password FROM mysql.user;
    

    如果您的密码是16个字符,这是因为您在用户的帐户上使用了旧的\u密码,或者运行了旧版本的MySQL。要更新,请键入

    UPDATE mysql.user SET Password=PASSWORD('newpass')
      WHERE User='root' AND Host='localhost';
    FLUSH PRIVILEGES;
    

    分别为用户、主机和pass交换root、localhost和newpass。现在当你打字的时候

    从mysql.User中选择主机、用户、密码;
    

        3
  •  4
  •   Guss    16 年前

    确保您的my.cnf没有

    old-passwords = 1 
    

    在您从my.cnf注释掉该设置(或从其他可能设置的位置删除该设置)并重新启动服务器后,请确保使用VolkerK描述的命令重新设置密码,否则您将无法登录。

        4
  •  3
  •   abbas    12 年前

    一个更简单的解决方案是删除数据库用户并创建一个具有相同用户名和密码的新用户。

        5
  •  2
  •   The Mad Gamer    15 年前

    正如上面用户Evernoob所说:

    “恢复到PHP 5.2.*即任何低于5.3.0的版本都可以完全解决问题。只要我没有运行5.3.0,我就可以连接到这两个数据库。我不确定对这种奇怪现象的解释是什么”

    在连接到使用oldpassword选项的共享软管(在我们的示例中是DreamHost)的情况下,我们无法修改users表。这些建议的选项将适用于其他场景,但不适用于共享web托管。

    当然,我们正在运行WAMP。

        6
  •  1
  •   user97410    16 年前

        7
  •  1
  •   Herb Meehan    15 年前

    恢复到PHP5.2。*成功了!非常感谢。

    选择所需的版本并下载。

    左键单击wamp>php>版本>PHP5.2*

    这解决了这个问题。我无法运行任何这些SQL命令,否则会出现“拒绝用户'XXX'@'localhost'的命令”错误。尝试以SU“Root”身份登录看起来不错。可能在个人服务器上,但不会在真正的主机上发生。

        8
  •  1
  •   Little Brain    9 年前

    我在网站的控制面板中找到了一个GUI,允许我更改数据库用户的密码。我尝试将其更改为当前密码,但这是不允许的,因为当前密码不够强。

    这成功了!

        9
  •  1
  •   AbdolHosein    7 年前

    经过大量的搜索和尝试,我找到了一种不需要对MySQL进行任何降级/升级,也不需要对运行MySQL实例的其他用户造成任何影响的方法。

    解决方案是通过以下方式重置密码:

    对于高于5.7.5(>5.7.5)的MySQL版本:

    将标识为的用户'mysqlUsername'@'hostname'更改为 mysql_本地_密码由“mysqlUsernamePassword”生成;

    对于较旧版本的MySQL:(<=5.7.5)

    密码('mysqlUsernamePassword');

    我找到了重点 here

    它使我的工作顺利!

        10
  •  1
  •   kenorb    7 年前

    如果您使用的是MySQL 8或更高版本,则 default authentication plugin caching_sha2_password ,所以降级到 mysql_native_password (在PHP不兼容的情况下),将其设置为 my.cfg ,例如。

    [mysqld]
    default-authentication-plugin=mysql_native_password
    

    然后重新启动MySQL服务。

    见: Upgrading to MySQL 8.0 : Default Authentication Plugin Considerations & Native Pluggable Authentication .

    ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password by 'root';
    FLUSH PRIVILEGES;
    

    推荐文章