【问题标题】:Laravel + stored procedure: Error Packets out of orderLaravel +存储过程:错误数据包乱序
【发布时间】:2019-03-07 02:25:20
【问题描述】:

我正在尝试从 laravel 5.6 调用存储过程,该存储过程在数据库客户端上运行正常。

CALL storedProcedure1(95, 2);

但是当我使用时:

$db = DB::select('exec storedProcedure1(?,?)', array(
    $param1,
    $param2
));

从 laravel 我得到以下信息:

"message": "数据包乱序。预期 1 收到 0。数据包 大小=131072”,“异常”:“错误异常”,“文件”: "D:\project\vendor\laravel\framework\src\Illuminate\Database\Concerns\ManagesTransactions.php", “行”:202,

我应该怎么做才能修复它?

【问题讨论】:

    标签: php mysql laravel stored-procedures


    【解决方案1】:

    您可以编辑config/database.php 文件并将其添加到您的数据库连接中

    'options'   => array(
       PDO::ATTR_EMULATE_PREPARES => true
    ),
    

    警告:这可能不是最好的方法。

    我在这里找到了这个解决方案:source

    【讨论】:

    • 我刚刚将PDO::ATTR_EMULATE_PREPARES => true 添加到我的选项数组中,它对我有用
    • PDO::ATTR_EMULATE_PREPARES 添加到数据库配置有一个严重的副作用。浮点数和小数被存储为整数(丢失小数位)。
    【解决方案2】:

    您可以在 laravel 5.4 中解决此数据包大小问题。在数据库文件中编写这行代码。将这行代码写在你有问题的地方,比如如果你在 MYSQL 中有问题,然后在 MYSQL 或 PGSQL 中写,然后在 pgsql 中对其他数据库类型做同样的事情。

    'options'  => [
            PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8', 
            PDO::ATTR_EMULATE_PREPARES => true,
        ]
    

    【讨论】:

    • 问题是启用 ATTR_EMULATE_PREPARES 选项,出于某种原因,开始将整数转换为使用 Eloquent 获取的模型上的字符串。所以,如果我错了,请纠正我,但我不认为这是一个解决方案。欢迎任何其他解决方法。
    • PDO::ATTR_EMULATE_PREPARES 添加到数据库配置有一个严重的副作用。浮点数和小数被存储为整数(丢失小数位)。
    【解决方案3】:

    在 Laravel 中,我只想在整个应用程序的一个位置调用存储过程。所以,我不想在 Configs 中设置 PDO 属性来防止全局级别的任何异常。因此,我创建了一个 PDO 连接并实现如下:

            $pdo = DB::connection()->getPdo();
            $pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
            $pdo->query('CALL my_stored_proc()');
    

    【讨论】:

    • 这个解决方案对我有用。但是我有一个问题:一旦调用过程,我必须撤消属性设置还是只持续当前位置?
    【解决方案4】:

    错误是 php 与 MySQL 服务器对话的方式不兼容。

    修复包括:

    • 避免错误 - 可能不使用存储过程(恕我直言,一般推荐)
    • 升级 MySQL 服务器版本(使用 laravel 进行更多测试)

    【讨论】:

      猜你喜欢
      • 2013-10-23
      • 2016-04-02
      • 2021-11-08
      • 1970-01-01
      • 2018-11-19
      • 2012-12-07
      • 1970-01-01
      • 2016-09-04
      • 2019-11-30
      相关资源
      最近更新 更多