【问题标题】:"Premature end of data" error with PHPPHP的“数据过早结束”错误
【发布时间】:2011-08-31 06:18:41
【问题描述】:

我刚刚开始在 PHP 项目中使用 WAMP,我得到了与这行代码相关的下一个错误:

$link=mysql_connect("localhost","myuser","mypas");

我读到我必须使用旧密码再次执行 SET PASSWORD,但在重新启动所有服务后仍然无法正常工作。我正在使用 PHP 5.3.4 和 MySQL 5.1.53 有什么帮助吗?谢谢

Warning: mysql_connect() [function.mysql-connect]: Premature end of data (mysqlnd_wireprotocol.c:554) in C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

( ! ) Warning: mysql_connect() [function.mysql-connect]: OK packet 1 bytes shorter than expected in C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

( ! ) Warning: mysql_connect() [function.mysql-connect]: mysqlnd cannot connect to MySQL 4.1+ using the old insecure authentication. Please use an administration tool to reset your password with the command SET PASSWORD = PASSWORD('your_existing_password'). This will store a new, and more secure, hash value in mysql.user. If this user is used in other scripts executed by PHP 5.2 or earlier you might need to remove the old-passwords flag from your my.cnf file in C:\wamp\www\CDE\includes\baseDatos.php on line 5 
Call Stack 
1 0.0002 667312 {main}( ) ..\index.php:0 
2 0.0008 682416 include( 'C:\wamp\www\CDE\includes\seguridad.php' ) ..\index.php:2 
3 0.0010 690984 include( 'C:\wamp\www\CDE\includes\baseDatos.php' ) ..\seguridad.php:2 
4 0.0014 692368 mysql_connect ( ) ..\baseDatos.php:5 

【问题讨论】:

  • 请将baseDatos.php的代码粘贴到ideone.com`并链接到这里。
  • 也许还可以查看Windows 7 PHP MySQL Connection Issues
  • baseDatos.php 只是一个包含以下信息的“包含文件”:ideone.com/pOvt9。如果有帮助,从 mysql.user 执行 SELECT 密码,我会得到一个 16 字节的密码,而不是原来的“mypas”。
  • 数据过早结束也称为过早结束(对不起,忍不住)

标签: php mysql apache wamp wampserver


【解决方案1】:

您正在连接到 localhost 表明您可能没有网络问题。

First hit in Google 列出了 2 个可能的原因/补救措施。

当有人使用 PHP 5.3... 和打算与 PHP 5.2 一起使用的 MySQL 数据库时出现此消息...我注意到当我更改为另一个时 统一服务器版本。

如果您无权访问数据库并且主要使用此远程连接进行开发(像我一样),则解决方案是配置两个 PHP 版本(目前是最新的带有 PHP 5.2 的统一服务器。 . 似乎是 PHP 5.2.13 的 5.6b-Nano)。

【讨论】:

  • 我试过了,但我没有“my.cnf”文件。只是一个“my.ini”,没有任何“old_passwords”行。
【解决方案2】:

上述问题是由于 PHP 和 MySQL 的版本不兼容造成的。多半是远程访问db时发生。

请检查您的 PHP 和 MySQL 版本。

我的版本是 PHP-5.3.6(本地机器)和 MySQL 5.1.56(Live DB)。

我的 MySQL 放置在实时域中,我将 PHP 文件保存在本地机器中。我遇到了同样的密码休息问题。

然后我用旧版本替换我的 XAMPP,它将我的 PHP 版本更改为 5.3.0。现在上述问题已经解决,我可以从本地访问实时数据库了。

【讨论】:

    【解决方案3】:

    如果使用 MySQL 4.1 + 试试这个

    在 MySQL 命令行中

    mysql> set old_passwords = 0; mysql> set password for 'user'@'some.host.domain' = PASSWORD('new_pass'); mysql> set old_passwords = 1;

    【讨论】:

      【解决方案4】:

      我遇到了同样的问题,并使用这样的 UPDATE 查询修复了它:

      UPDATE mysql.user SET Password = PASSWORD('newpwd') WHERE Host = 'some_host' AND User = 'some_user';
      

      不知道为什么,但是 SET Password 不起作用。

      为了确保问题出在我认为您应该在 mysql 数据库上执行此查询的问题:

      SELECT
      `user`.`Password`
      FROM
      `user`
      WHERE
      `user`.`User` = 'youruser' AND
      `user`.`Host` = 'yourhost'
      

      如果密码不以 * 开头,问题是您仍然拥有旧密码

      编辑 _ 这是一个为 MYSQL 创建有效密码的 php 函数(取自 here):

      function mysql_41_password($in)
      {
      $p=sha1($in,true);
      $p=sha1($p);
      return "*".strtoupper($p);
      }
      

      然后你可以手动设置密码:

      //newpwd is the passowr dgenerated in php
      UPDATE mysql.user SET Password = 'newpwd' WHERE Host = 'some_host' AND User = 'some_user';
      FLUSH PRIVILEGES;
      

      【讨论】:

      • 我这样做了,我的密码是 038872231aa1b123。如何更改为新加密?谢谢
      • 您确定您的 ini 文件中没有旧密码之类的东西吗?
      • 好吧,您可以在 php 中生成一个有效密码并使用更新查询进行设置,然后我更新了我的答案以显示如何操作。希望对你有帮助
      • 我使用的是远程服务器,使用上述方法解决此类问题需要服务器的root访问权限(SSH)。大多数客户没有提供这些安全的细节。否则,这是解决重置密码问题的非常简单快捷的方法。
      猜你喜欢
      • 2011-09-11
      • 2017-10-05
      • 1970-01-01
      • 2018-04-08
      • 2011-04-20
      • 1970-01-01
      • 1970-01-01
      • 2017-07-22
      • 2013-07-09
      相关资源
      最近更新 更多