Laravel / MySQL 错误:SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包

Cre*_*lix 8 php mysql laravel

早上好。我在 VPS 服务器上使用 Laravel。

简短情况描述:昨天一切正常(几个月来我们的网站都运行良好),今天早上我从同事那里醒来,发现我们的两个网站都关闭了。

尝试访问它们时,我们收到错误消息:

SQLSTATE[HY000]:一般错误:1835 格式错误的通信数据包(SQL:select * from userswhere id= 1 limit 1)

我在网上查过,找不到解决办法。我试图将 MySQL 升级到最新版本 ( Maria DB 10.3)

我试图为数据库用户重置密码。(也没有变化)

我检查并尝试read_rnd_buffer_size=256K在 my.cnf 文件中为 mysql 设置设置sollution

当我尝试直接在 phpMyAdmin 中调用此函数时,select * from users where id = 1 limit 1它返回预期结果。

我将感谢每一个帮助,因为我们所有的业务都依赖于这些平台,我需要尽快让它们工作。

问候,阿蒂斯。

编辑:当我尝试禁用导致错误的功能时,它只显示下一个功能,等等。所以我相信Laravel根本无法与mysql连接。

经过深入研究,我发现只有 Laravel 无法连接到数据库。在同一台服务器上,我有 2 个 Laravel 应用程序、Codeigniter 和 wordpress。两个 Laravel 应用程序同时停止工作,但 codeigniter 和 wordpress 正常工作。

ait*_*lla 9

快速修复只需添加这个

'options' => [PDO::ATTR_EMULATE_PREPARES => true]
Run Code Online (Sandbox Code Playgroud)

到 config/database.php 中

'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', 'forge'),
        '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],
    ],
Run Code Online (Sandbox Code Playgroud)

正确的解决方案是将您的 php 从 7.2 升级到 7.4 或降级您的 mariadb