我正在尝试从laravel 5.6调用存储过程,该存储过程可以从数据库客户端正常工作。
CALL storedProcedure1(95, 2);
但是当我使用时:
$db = DB::select('exec storedProcedure1(?,?)', array(
$param1,
$param2
));
从laravel我得到以下信息:
“ message”:“数据包乱序。预期1收到0。数据包 size = 131072“,” exception“:” ErrorException“,” file“: “ D:\ project \ vendor \ laravel \ framework \ src \ Illuminate \ Database \ Concerns \ ManagesTransactions.php”, “行”:202,
我应该怎么做才能修复它?
答案 0 :(得分:0)
错误是php与MySQL服务器的通讯方式不兼容。
修复包括:
答案 1 :(得分:0)
您可以编辑config/database.php
文件并将其添加到数据库连接中
'options' => array(
PDO::ATTR_EMULATE_PREPARES => true
),
警告:这可能不是最好的方法。
我在这里找到了此解决方案:source
答案 2 :(得分:0)
您可以在laravel 5.4中解决此数据包大小问题。在数据库文件中编写此行代码。将这行代码写在您遇到问题的地方,例如,如果您在MYSQL中有问题,然后在MYSQL oR中编写PGSQL,然后在pgsql中编写,则与其他数据库类型相同。
'options' => [
PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8',
PDO::ATTR_EMULATE_PREPARES => true,
]
答案 3 :(得分:0)
在 Laravel 中,我只想在整个应用程序的一个地方调用一个存储过程。所以,我不想在 Configs 中设置 PDO 属性来防止全局级别的任何异常。因此,我创建了一个 PDO 连接并实现如下:
$pdo = DB::connection()->getPdo();
$pdo->setAttribute(\PDO::ATTR_ERRMODE, \PDO::ERRMODE_EXCEPTION);
$pdo->query('CALL my_stored_proc()');