我正在尝试根据laravel文件中第一个存储过程的成功和输出来正确执行第二个存储过程。
我当前正在成功执行此操作(插入记录,并在$ out2中返回记录ID,这是我想要的)
function firstRecord($firstName, $lastName, $email, $customer, $code, $auth)
{
$stmt = \DB::connection()->getPdo()->prepare('CALL SCHEMA.INSERTRECORD(?,?,null,null,null,null,null,null,?,?,?,?)');
$stmt->bindParam(1, $firstName, PDO::PARAM_STR);
$stmt->bindParam(2, $lastName, PDO::PARAM_STR);
$stmt->bindParam(3, $email, PDO::PARAM_STR);
$stmt->bindParam(4, $customer, PDO::PARAM_STR);
$stmt->bindParam(5, $code, PDO::PARAM_STR);
$stmt->bindParam(6, $out2, PDO::PARAM_STR, 20);
$stmt->execute();
}
现在执行该操作时,我需要将某些值(auth,out2和email)发送到另一个执行另一过程的函数中,并且所有4个参数都必须为字符串:
function secondRecord($out2, $email, $auth)
{
$type = 'web';
$userStmt = \DB::connection()->getPdo()->prepare('call SCHEMA.INSERTRECORDTWO(?,?,?,?)');
$userStmt->bindParam(1, $out2, PDO::PARAM_STR);
$userStmt->bindParam(2, $email, PDO::PARAM_STR);
$userStmt->bindParam(3, $auth, PDO::PARAM_STR, 2500);
$userStmt->bindParam(4, $type, PDO::PARAM_STR, 20);
$userStmt->execute();
}
在第一个过程/函数成功后,如何使用这些值正确调用第二个函数?
答案 0 :(得分:1)
考虑到调用存储函数的特定要求,可以使用以下代码段:
请注意,我使用的是更易于维护的命名绑定。另外,如果您的存储过程正在返回(选择)某项内容,则可以使用DB::select()
将其作为输出。
我故意捕获QueryException
,因为如果您的数据库没有调用程序或传递了无效的参数,则可以在那里处理这些参数
public function firstRecord($firstName, $lastName, $email, $customer, $code, $auth)
{
try{
$insertion = \DB::select( \DB::raw('CALL SCHEMA.INSERTRECORONE(:firstname, :lastname, null, null, null, null, null, null, :email, :customer, :code, :out2)', [
'firstName' => $firstName,
'lastName' => $lastName,
'email' => $email,
'customer' => $customer,
'code' => $code,
'out2' => $out2
]));
$this->secondRecord($out2, $email, $auth, $insertion)
return $insertion;
}
catch(QueryException $e){
throw new \Exception('Unable to insert records : ' . $e->getMessage());
}
}
private function secondRecord($out2, $email, $auth, $insertion)
{
try{
$insertion = \DB::select( \DB::raw('CALL SCHEMA.INSERTRECORDTWO(:out2, :email, :auth, :type)', [
'email' => $email,
'auth' => $auth,
'out2' => $out2,
'type' = 'web'
]));
return $insertion;
}
catch(QueryException $e){
throw new \Exception('Unable to insert records in second function : ' . $e->getMessage());
}
}
但是,我要说的是laravel非常适合使用雄辩的模型来完成这些事情,除非您有非常具体的理由来减少MySQL中的语句解析时间并使用存储的函数/过程调用。