微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SQLSTATE [HY000]:一般错误:1835 LARAVEL上的通信数据包格式错误

如何解决SQLSTATE [HY000]:一般错误:1835 LARAVEL上的通信数据包格式错误

突然得到

sqlSTATE [HY000]:一般错误:1835格式错误的通信数据包(sql:从tb_users中选择*,其中(username = 121211)限制1)

在Laravel上。

我已经检查过:MySQL: ERROR 2027 (HY000): Malformed packet,但情况似乎有所不同。

  1. 以前使用SSH登录(使用:MysqL -u -p)后,我已经成功登录MysqL
  2. 我已经成功地从远程PC直接登录MysqL(使用:MysqL -h [IP] -u -p)。

但是我的Laravel遇到了我之前提到的错误。有经验吗?

解决方法

我所有运行PHP 7.2的Laravel应用程序都出现此错误,但在PHP 7.3上运行的应用程序则没有。因此,我将PHP版本更改为7.3,此问题已解决。 (运行Laravel 7)

,

找到了解决方案。不知道它是永久的还是临时的:

'mysql' => [
            'driver' => 'mysql','host' => env('DB_HOST','127.0.0.1'),'port' => env('DB_PORT','3306'),'database' => env('DB_DATABASE','forge'),'username' => env('DB_USERNAME','password' => env('DB_PASSWORD',''),'unix_socket' => env('DB_SOCKET','charset' => 'utf8mb4','collation' => 'utf8mb4_unicode_ci','prefix' => '','strict' => false,'engine' => null,**'options'   => [PDO::ATTR_EMULATE_PREPARES => true]**
        ],

确保

'options'=> [PDO :: ATTR_EMULATE_PREPARES => true]

存在于mysql连接上。

,

在昨天将MariaDB更新到v10.3.26(和10.2.35)之后,最近对MariaDB进行了更新,此问题开始在很多人身上发生。此问题已在此处解决:https://jira.mariadb.org/browse/MDEV-24121

到目前为止,这是唯一已知的解决方案:

1。将您的PHP升级到7.3:在使用php

缺点:并非如此,很多应用程序都可以轻松升级到php 7.3。有时,您可能需要更新平台,重写一些代码或检查所有依赖关系,然后查看它们是否都适用于7.3。对于许多成熟的应用程序,这可能不是一个快速解决方案。

2。降级MariaDB:这是一个临时修复程序,因为降级MariaDB会将其设置回以前的状态。

缺点:只需单击cpanel中的按钮,就不容易对MariaDB进行降级。您可能需要网络工程师的帮助才能为您进行降级。之后,您可能还需要做yum锁定MariaDB程序包,以防止在对其进行修补之前对其进行更新。

3。将'options' => [PDO::ATTR_EMULATE_PREPARES => true]添加到Database Config:在一些答案中建议使用此方法,它可能会解决1个问题,但会带来很多其他问题。

缺点:将以上内容添加到数据库配置文件中为我解决了1个问题,但同时也打开了很多其他失败的查询,数据库插入失败的地方等等。所以我会完全不推荐此修复程序。

4。等待MariaDB更新:下一次更新应解决此问题。

缺点::我们不知道要花多长时间才能获得可解决旧版PHP问题的更新。甚至可能需要几天的时间,并且某些应用程序可能无法等待那么长时间。

总而言之,这些是我到目前为止唯一可以看到的选项。只是希望很快能解决此问题。

短期修复:最重要的是,考虑到我的应用程序需要大量的工作来准备php 7.3,降级MariaDB似乎是我的唯一简单(临时)临时修复。我将MariaDB降级到10.2.34并锁定了它,该错误不再出现。

长期修复:最好最终使您的应用程序为php 7.3做好准备并升级到该版本,以便MariaDB较新的版本也不会抱怨。

,

mariadb通宵更新后也遇到了这个问题。降级mariadb可以解决此问题。

https://support.cpanel.net/hc/en-us/articles/360056772334

,

发布的emergency Release of MariaDB 10.5.8,10.4.17,10.3.27,and 10.2.36 is now available是专门解决旧PHP版本和PDO中此协议不兼容的问题。

,

正式修复已结束,您可以在链接上找到详细信息:
https://support.cpanel.net/hc/en-us/articles/360056772334/comments/360005577354


要快速修复它,只需通过SSH连接并运行

sudo /scripts/autorepair fix_mariadb_show_grants_roles

对于已应用了先前解决方法的用户,其中包括降级MariaDB。确保解锁MariaDB,以确保它继续收到适当的更新:

yum versionlock clear
/scripts/upcp
,

在cpanel中为我的子域更新了php版本**(7.2至7.3)**。

必须将所有特权授予所选的数据库用户。

对我有用。

,

我使用的是Ubuntu 20(重点版本),请注意,您需要根据16(xenial),18(仿生)或其他版本来更改它。

我不喜欢Laravel中的选项修复,因为它有可能破坏数据的风险,而且如果不做大量工作就无法将PHP升级到7.2+,因此对我而言我降级了一个版本。

不建议从10.3.26-> 10.3.25开始,而不从转储中恢复所有数据,但是我别无选择,看来没有发生任何不好的事情。

# stop the database

service mariadb stop

# list packages installed

dpkg -l | grep mariadb 

# remove whatever you have or the install will complain about dependencies or broken packages,you need to remove all the mariadb packages

apt remove mariadb-server-core-10.3 
apt remove mariadb-server-10.3
apt remove mariadb-server-10.2
apt remove mariadb-server-10.1

# pin the repo to v10.3.25,remember to remove any conflicting sources you have in /etc/apt/sources.list

apt-get install software-properties-common
apt-key adv --fetch-keys 'https://mariadb.org/mariadb_release_signing_key.asc'
add-apt-repository 'deb [arch=amd64,arm64,ppc64el] http://archive.mariadb.org/mariadb-10.3.25/repo/ubuntu/ focal main'

# install the old version

apt install mariadb-server

# start it back up

service mariadb start
,

对我有用的是将子域上的PHP版本从7.2升级到7.3。我没有按照某些答案中的建议对数据库配置进行任何更改。

,

突然错误消息是由MariaDB客户端升级引起的,该升级似乎与php-mysqlnd的PHP 7.2版本不兼容;版本10.2.35破坏了它,但版本10.2.34仍然有效。使用yumdnf可以轻松还原到以前的版本,例如。与:

su
yum history
yum history undo 440

enabled=0中的临时设置/etc/yum.repo.d/mariadb.repo也可能有意义。
升级到PHP 7.3可能仍然是更好的选择(如果可用)。

,

MariaDB刚刚发布了一个升级,该升级为无法在PHP> = 7.3上运行其应用程序的用户解决了此问题,来源:https://mariadb.org/mariadb-10-5-8-10-4-17-10-3-27-and-10-2-36-now-available/

,

Mariadb已针对php 7.2进行了更新,可解决此问题,只需更新服务器即可:

sudo apt update
sudo apt upgrade
,

经过许多解决方法后,我今天尝试了此解决方案

1-升级到php 7.3或7.4
(许多网站在php升级后都会关闭)

2-降级至次要版本(mariadb 10.4.16至10.4.15)

yum downgrade MariaDB-server MariaDB-common MariaDB-shared MariaDB-client MariaDB-compat MariaDB-devel    

无论如何,这个问题是在昨晚更新Mariadb的错误时打开的,他们暂时没有进行任何修复 上面的解决方案只是解决问题的2种方法,它可以与我将mariadb从10.4.16降级到10.4.15(轻微降级)一起使用

,

对我而言,将php 7.2升级到php7.4的最佳方法。

` sudo add-apt-repository ppa:ondrej / php

sudo apt更新

sudo apt安装php7.4-fpm php7.4-常见的php7.4-mysql php7.4-xml php7.4-xmlrpc php7.4-curl php7.4-gd php7.4-imagick php7.4- cli php7.4-dev php7.4-imap php7.4-mbstring php7.4-soap php7.4-zip php7.4-bcmath -y

sudo a2enmod proxy_fcgi setenvif

sudo a2enconf php7.4-fpm

sudo systemctl重新加载apache2

sudo systemctl状态php7.4-fpm `

固定

,

简单的解决方案只需将您​​的 PHP 更新到 7.3 在 Laravel 和 WP 中为我工作

,

如果您的查询的输入参数数量与您传入的参数数组的数量不同,就会发生这种情况。这是我在 NodeJS + MYSQL 中导致此问题的代码:

const config = getMysqlConfig();

let arguments = [arg1,arg2];
const connection = await mysql.createConnection(config.db);

const result = await connection.execute('INSERT INTO mySchema.myTable(val1,val2) VALUES (?,?) ON DUPLICATE KEY UPDATE val1= val1+ ?',arguments)
.catch((err) => LogError(err));
connection.end(); 

因为我在 arguments 中只有 2 个值,而我的查询需要 3 个参数,所以抛出了 malformed communication 错误。对我来说,解决方案只是在数组中添加我的加法参数

let arguments = [arg1,arg2,arg3];

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。